3

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

http://www.manta.com/mb?search=US+Cellular&refine_company_loctype=B

我自己尝试过,无论出于何种原因,我在这里没有得到任何结果是代码

using (var wc = new WebClient())
{
    HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();

    doc.LoadHtml(wc.DownloadString("http://www.manta.com/mb?search=U.S.+Cellular&refine_company_loctype=B"));

    var links = doc.DocumentNode.SelectSingleNode("//div[@class='clear']")
        .Descendants("a")
        .Select(x => x.Attributes["href"].Value)
        .ToArray();

    foreach(var item in links)
    {
        Response.Write(item.ToString()+"---new line---<br/>");
    }
}
4

1 回答 1

1

首先,您尝试抓取的网站具有验证码和/或超时保护,可防止对网站的许多请求。

所以你应该考虑到这一点。在这种情况下,您将成为没有 div 的不同网页。

其次,您通过 SelectSingleNode 从文档中仅选择一个节点,因此它仅返回一个节点。

所以试试下面的代码:

using (var wc = new WebClient())
{
    HtmlDocument doc = new HtmlDocument();

    doc.LoadHtml(wc.DownloadString("http://www.manta.com/mb?search=U.S.+Cellular&refine_company_loctype=B"));                

    var divs = doc.DocumentNode.SelectNodes("//div[@class='clear']");

    if (!divs.Any())
        Response.Write("Not found or timeout protection mechanism");

    foreach (var item in divs)
    {
        HtmlNode link = item.Descendants("a").FirstOrDefault();
        Response.Write(link.GetAttributeValue("href", string.Empty));
    }
}
于 2012-08-26T12:27:38.750 回答