웹 사이트에서 이미지 목록을 얻으 려하고 하드 디스크에 저장하려고하지만 작동하지 않습니다.

c# html-agility-pack

문제

HtmlAgilityPack을 사용하고 있습니다.

이 함수에서 foreach 카운트의 imageNodes 는 0입니다.

나는 왜 목록 수가 0인지 이해하지 못한다.

웹 사이트에는 많은 이미지가 포함되어 있습니다. 내가 원하는 것은 사이트에서 이미지 목록을 얻고 richTextBox1 목록을 표시하고 사이트의 모든 이미지를 하드 디스크에 저장하려고합니다.

어떻게 해결할 수 있습니까?

public void GetAllImages()
{
   // Bing Image Result for Cat, First Page
   string url = "http://www.bing.com/images/search?q=cat&go=&form=QB&qs=n";

   // For speed of dev, I use a WebClient
   WebClient client = new WebClient();
   string html = client.DownloadString(url);

   // Load the Html into the agility pack
   HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
   doc.LoadHtml(html);

   // Now, using LINQ to get all Images
   List<HtmlNode> imageNodes = null;
   imageNodes = (from HtmlNode node in doc.DocumentNode.SelectNodes("//img")
                 where node.Name == "img"
                    && node.Attributes["class"] != null
                    && node.Attributes["class"].Value.StartsWith("img_")
                 select node).ToList();

   foreach (HtmlNode node in imageNodes)
   {
      // Console.WriteLine(node.Attributes["src"].Value);
      richTextBox1.Text += node.Attributes["src"].Value + Environment.NewLine;
   }
}

수락 된 답변

내가 알 수 있듯이 Bing 이미지의 올바른 클래스는 sg_t 입니다. 다음 Linq 쿼리를 사용하여 해당 HtmlNodes 를 얻을 수 있습니다.

List<HtmlNode> imageNodes = doc.DocumentNode.Descendants("img")
    .Where(n=> n.Attributes["class"] != null && n.Attributes["class"].Value == "sg_t")
    .ToList();

이 목록은 class = 'sg_t' 모든 imgclass = 'sg_t'


인기 답변

코드의 해당 예제 페이지 / URL을 잠깐 살펴보면 이후 이미지의 클래스 유형이 "img_"로 시작하지 않는다는 것을 알 수 있습니다.

<img class="sg_t" src="http://ts2.mm.bing.net/images/thumbnail.aspx?q=4588327016989297&amp;id=db87e23954c9a0360784c0546cd1919c&amp;url=http%3a%2f%2factnowtraining.files.wordpress.com%2f2012%2f02%2fcat.jpg" style="height:133px;top:2px">

귀하의 코드가 thumnails 만 타겟팅하는 것으로 나타났습니다. 각 미리보기 이미지를 둘러싼 앵커에있는 전체 크기 이미지 URL을 원할 수도 있습니다. 다음과 같은 href에서 최종 도착 URL을 가져와야합니다.

<img class="sg_t" src="http://ts2.mm.bing.net/images/thumbnail.aspx?q=4588327016989297&amp;id=db87e23954c9a0360784c0546cd1919c&amp;url=http%3a%2f%2factnowtraining.files.wordpress.com%2f2012%2f02%2fcat.jpg" style="height:133px;top:2px">

다음과 같은 비트를 디코딩하십시오. url=http%3a%2f%2factnowtraining.files.wordpress.com%2f2012%2f02%2fcat.jpg

다음에 디코딩 : http://actnowtraining.files.wordpress.com/2012/02/cat.jpg




아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.