PDA

View Full Version : سوال: استخراج آدرس عکس از سورس Html



بیتا حکمت
سه شنبه 05 خرداد 1394, 22:49 عصر
ســلام . وقت بخیر . کدهای زیادی رو تست کردم که عکس رو از سورس Html استخراج کنه اما اکثرا" مشکل داشتند . این کد تقریبا" درست عمل می کنه




public static List<Uri> FetchLinksFromSource(string htmlSource)
{
List<Uri> links = new List<Uri>();
string regexImgSrc = @"<img[^>]*?src\s*=\s*[""']?([^'"" >]+?)[ '""][^>]*?>";
MatchCollection matchesImgSrc = Regex.Matches(htmlSource, regexImgSrc, RegexOptions.IgnoreCase | RegexOptions.Singleline);
foreach (Match m in matchesImgSrc)
{
string href = m.Groups[1].Value;
links.Add(new Uri(href));
using (StreamWriter sw = File.AppendText(@"E:\bita\test.txt"))
{
sw.WriteLine(href);

}

}
return links;
}


تنها مشکلی که داره اینکه لینک هایی مث این هم برگشت داده میشن :



files/fa/news_albums/397806/2522/resized/resized_463084_862.jpg



اما اون چیزی که من دنبالش هستم ، یه همچین لینک هایی هستند : (البته سایت عصر ایران مثال هست و من برای عکس اکثر سایت ها میخوام کار کنه ، بهتر بگم از اکثر سورس های Html آدرس Url رو در بیاره )




ttp://cdn.asriran.com/files/fa/news/1394/3/5/463150_778.jpg
http://cdn.asriran.com/files/fa/news/1394/3/5/463153_139.jpg
http://cdn.asriran.com/files/fa/news/1394/3/5/463190_269.jpg

بیتا حکمت
سه شنبه 05 خرداد 1394, 22:57 عصر
راستی یک سوال دیگه هم دارم ، متد بالا خروجی ازش از نوع لیست هست ، من متوجه نشدم به ایتم های خروجی این متد چطور دسترس داشته باشم ، منظورم اینکه باید یه چیزی مشابه این تو سی شارپ وچود داشته باشه


messagebox.show( FetchLinksFromSource.listitem[0].tostring());
messagebox.show( FetchLinksFromSource.listitem[1].tostring());
.
.
messagebox.show( FetchLinksFromSource.listitem[n].tostring());

fafa_n6190
چهارشنبه 06 خرداد 1394, 08:19 صبح
سوال اول:

سلام ، بهتره از متد StartsWith (http://www.dotnetperls.com/startswith) استفاده کنید و http:// و www رو به عنوان ورودی بدین و دو شرط رو Or کنید. این متد برای آدرس هایی با فرمت زیر درست عمل خواهد کرد:

1- www.barnamenevis.org (http://www.barnamenevis.org)
2-http://barnamenevis.org
3-http://www.barnamenevis.org

و در غیر این صورت چک بکنید که حداقل 2 کاراکتر "." توی آدرس هاتون وجود داشته باشند ، این برای وقتیه که آدرس ها به شکل زیر باشن:

cdn.asriran.com/files/fa/news/1394/3/5/463150_778.jpg (ttp://cdn.asriran.com/files/fa/news/1394/3/5/463150_778.jpg)

با موجود بودن کاراکتر "." اول احتمال می دید که این آدرس یک دامنه داره و با موجود بودن کاراکتر "." دوم مطمئن میشید که کاراکتر "." اول مطعلق به فرمت عکس نیست


سوال دوم:


خروجی متد بالا یه لیسته شما ابتدا خروجی متد رو داخل متغییری بریزید و سپس به راحتی بهش دسترسی داشته باشید List (http://www.dotnetperls.com/list)



var x= FetchLinkesFromSource(source);
messagebox.show( x[n].tostring());

بیتا حکمت
پنج شنبه 07 خرداد 1394, 14:41 عصر
سوال اول:

سلام ، بهتره از متد StartsWith (http://www.dotnetperls.com/startswith) استفاده کنید و http:// و www رو به عنوان ورودی بدین و دو شرط رو Or کنید. این متد برای آدرس هایی با فرمت زیر درست عمل خواهد کرد:

1- www.barnamenevis.org (http://www.barnamenevis.org)
2-http://barnamenevis.org
3-http://www.barnamenevis.org

و در غیر این صورت چک بکنید که حداقل 2 کاراکتر "." توی آدرس هاتون وجود داشته باشند ، این برای وقتیه که آدرس ها به شکل زیر باشن:

cdn.asriran.com/files/fa/news/1394/3/5/463150_778.jpg (ttp://cdn.asriran.com/files/fa/news/1394/3/5/463150_778.jpg)

با موجود بودن کاراکتر "." اول احتمال می دید که این آدرس یک دامنه داره و با موجود بودن کاراکتر "." دوم مطمئن میشید که کاراکتر "." اول مطعلق به فرمت عکس نیست


سوال دوم:


خروجی متد بالا یه لیسته شما ابتدا خروجی متد رو داخل متغییری بریزید و سپس به راحتی بهش دسترسی داشته باشید List (http://www.dotnetperls.com/list)



var x= FetchLinkesFromSource(source);
messagebox.show( x[n].tostring());




متاسفانه روشی هم که شما گفتین در بعضی موارد اشتباه جواب می ده ، مثلا" وقتی آدرس به این صورت هست بازم برگشت داده میشه



http://yazdrasa.ir/documents/19536/11698058/IMG_7101.jpg?t=1431497996813


یا این

href = "http://www.khorasannews.com/NewsImage.aspx?id=1524477&amp;filename=2002.jpg"