Html敏捷性无法获得结果

时间:2012-08-26 10:06:26

标签: c# .net web-scraping html-agility-pack

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

http://www.manta.com/mb?search=U.S.+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/>");
    }
}

1 个答案:

答案 0 :(得分: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));
    }
}