获取div中的所有链接并将其保存到列表中

时间:2017-03-20 13:02:53

标签: c# html html-agility-pack

我下载了一个带有WebClient和downloadString()的html网站,然后我尝试将它们之间的所有链接都放到一个列表中。

经过几次尝试和两个小时的工作,有一次我获得了所有链接,有时我得到一个,有时候我没有。

这是我的代码示例 - 我只是为了更好的可读性而放弃了Catch Block。

List<string> getLinks = new List<string>();
for (int i = 0; i < wikiUrls.Length; i++)
{
    try
    {
        string download = client.DownloadString(wikiUrls[i]);
        string searchForDiv = "<div class=\"wiki\">";
        int firstCharacter = download.IndexOf(searchForDiv);
        //if wiki doens't exists, go to next element of for loop
        if (firstCharacter == -1)
            continue;
        else
        {
            HtmlAgilityPack.HtmlDocument document = new HtmlAgilityPack.HtmlDocument();
            document.LoadHtml(download);
            string nodes = String.Empty;
            var div = document.DocumentNode.SelectSingleNode("//div[@class=\"wiki\"]");
            if (div != null)
            {
                getLinks = div.Descendants("a").Select(node => node.GetAttributeValue("href", "Not found \n")).ToList(); 
                output.Text = string.Join(" ", getLinks);
            }
        }
    }

1 个答案:

答案 0 :(得分:1)

我明白了。这是因为

getLinks = div.Descendants("a").Select(node => node.GetAttributeValue("href", "Not found \n")).ToList();

GetLinks总是被覆盖,因为它处于for循环中。我解决了这个问题:

getLinks.AddRange(div.Descendants("a").Select(node => node.GetAttributeValue("href", String.Empty)).ToList());