كيف يمكنني استخدام حزمة HTML Agility لاسترداد جميع الصور من موقع ويب؟

StackOverflow https://stackoverflow.com/questions/2113924

  •  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", "") );
       }


    }
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top