c#在html中查找图像并下载它们

时间:2009-08-11 22:11:25

标签: c#

我想下载存储在html(网页)中的所有图片,我不知道将下载多少图像,我不想使用“HTML AGILITY PACK”

我在谷歌搜索,但所有网站让我更加困惑,

我试过正则表达式,但只有一个结果......,

4 个答案:

答案 0 :(得分:14)

人们正在给你正确的答案 - 你也不能挑剔和懒惰。 ; - )

如果您使用半生不熟的解决方案,您将处理许多边缘情况。这是一个使用HTML Agility Pack获取HTML文档中所有链接的工作示例(它包含在HTML Agility Pack下载中)。

这是一篇博文,展示如何grab all images in an HTML document with HTML Agility Pack and LINQ

    // 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
    HtmlDocument doc = new 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);
    }

答案 1 :(得分:5)

首先,我不能单独留下这句话:

  

存储在html中的图像

这句话可能是你的问题被投票两次的重要原因。图像存储在html中。 Html页面引用了Web浏览器单独下载的图像。

这意味着您需要分三步完成:首先下载html,然后在html中找到图像引用,最后使用这些引用自行下载图像。

要完成此任务,请查看System.Net.WebClient()课程。它有一个.DownloadString()方法可以用来获取html。然后,您需要找到所有<img />标记。你在这里拥有自己的,但它足够直截了当。最后,您使用WebClient的.DownloadData()DownloadFile()方法来检索图像。

答案 2 :(得分:4)

您可以使用WebBrowser控件并从中提取HTML。

System.Windows.Forms.WebBrowser objWebBrowser = new System.Windows.Forms.WebBrowser();
objWebBrowser.Navigate(new Uri("your url of html document"));
System.Windows.Forms.HtmlDocument objDoc = objWebBrowser.Document;
System.Windows.Forms.HtmlElementCollection aColl = objDoc.All.GetElementsByName("IMG");
...

或直接调用IHTMLDocument COM接口系列

答案 3 :(得分:2)

一般而言

  1. 您需要获取html页面
  2. 搜索img标签并从中提取src =“...”部分
  3. 保留所有这些提取的图片网址的列表。
  4. 逐一下载。
  5. 也许这个关于C# HTML parser的问题会对你有所帮助。