C#使用html敏捷性抓取网址

时间:2012-08-19 07:54:17

标签: c# html url html-agility-pack

好的,我在这个网页上有这个URL列表,我想知道如何获取URL并将它们添加到ArrayList中?

http://www.animenewsnetwork.com/encyclopedia/anime.php?list=A

我只想要列表中的URL,看看它是什么意思。我尝试自己做,无论出于何种原因,它除了我需要的所有其他URL之外。

   http://pastebin.com/a7hJnXPP

2 个答案:

答案 0 :(得分:0)

使用Html Agility Pack

using (var wc = new WebClient())
{
    HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
    doc.LoadHtml(wc.DownloadString("http://www.animenewsnetwork.com/encyclopedia/anime.php?list=A"));
    var links = doc.DocumentNode.SelectSingleNode("//div[@class='lst']")
        .Descendants("a")
        .Select(x => x.Attributes["href"].Value)
        .ToArray();
}

答案 1 :(得分:0)

如果你只想要列表中的那些,那么下面的代码应该有用(假设你已经将页面加载到HtmlDocument中)

List<string> hrefList = new List<string>(); //Make a list cause lists are cool.

foreach (HtmlNode node animePage.DocumentNode.SelectNodes("//a[contains(@href, 'id=')]"))
{
    //Append animenewsnetwork.com to the beginning of the href value and add it
    // to the list.
    hrefList.Add("http://www.animenewsnetwork.com" + node.GetAttributeValue("href", "null"));
}

//a[contains(@href, 'id=')]按如下方式打破此XPath:

  • //a选择所有<a>个节点...
  • [contains(@href, 'id=')] ...包含href属性,其中包含文字id=

这应该足以让你前进。

顺便说一下,考虑到该页面上有大约500个链接,我建议不要在其自己的消息框中列出每个链接。 500个链接= 500个消息框:(