كيف يمكنني استخدام حزمة HTML Agility لاسترداد جميع الصور من موقع ويب؟
-
22-09-2019 - |
سؤال
لقد قمت للتو بتنزيل HTMLAGILITYPACK ولم يكن للوثائق أي أمثلة.
أبحث عن طريقة لتنزيل جميع الصور من موقع ويب. سلاسل العنوان ، وليس الصورة المادية.
<img src="blabalbalbal.jpeg" />
أحتاج إلى سحب مصدر كل علامة IMG. أريد فقط أن أشعر بالمكتبة وما يمكن أن تقدمه. قال الجميع إن هذا كان أفضل أداة لهذا المنصب.
تعديل
public void GetAllImages()
{
WebClient x = new WebClient();
string source = x.DownloadString(@"http://www.google.com");
HtmlAgilityPack.HtmlDocument document = new HtmlAgilityPack.HtmlDocument();
document.Load(source);
//I can't use the Descendants method. It doesn't appear.
var ImageURLS = document.desc
.Select(e => e.GetAttributeValue("src", null))
.Where(s => !String.IsNullOrEmpty(s));
}
المحلول
يمكنك القيام بذلك باستخدام LINQ ، مثل هذا:
var document = new HtmlWeb().Load(url);
var urls = document.DocumentNode.Descendants("img")
.Select(e => e.GetAttributeValue("src", null))
.Where(s => !String.IsNullOrEmpty(s));
تعديل: هذا الرمز يعمل الآن بالفعل ؛ لقد نسيت الكتابة document.DocumentNode
.
نصائح أخرى
بناءً على مثال واحد ، ولكن مع XPath المعدلة:
HtmlDocument doc = new HtmlDocument();
List<string> image_links = new List<string>();
doc.Load("file.htm");
foreach(HtmlNode link in doc.DocumentElement.SelectNodes("//img"))
{
image_links.Add( link.GetAttributeValue("src", "") );
}
لا أعرف هذا الامتداد ، لذلك لست متأكدًا من كيفية كتابة الصفيف إلى مكان آخر ، لكن هذا سيحصل على الأقل على بياناتك. (أيضًا ، أنا لا أحدد الصفيف بشكل صحيح ، أنا متأكد. آسف).
تعديل
باستخدام مثالك:
public void GetAllImages()
{
WebClient x = new WebClient();
string source = x.DownloadString(@"http://www.google.com");
HtmlAgilityPack.HtmlDocument document = new HtmlAgilityPack.HtmlDocument();
List<string> image_links = new List<string>();
document.Load(source);
foreach(HtmlNode link in document.DocumentElement.SelectNodes("//img"))
{
image_links.Add( link.GetAttributeValue("src", "") );
}
}
لا تنتمي إلى StackOverflow