【问题标题】:Html agility cant get the resultsHtml敏捷无法得到结果
【发布时间】:2012-08-26 10:06:26
【问题描述】:

我在以下网页上有这个 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/>");
    }
}

【问题讨论】:

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


    【解决方案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));
        }
    }
    

    【讨论】:

    • 击败我,我唯一要改变的是检查 divs 是否为空,因为敏捷包不返回空集合而是返回空。
    • 不,不仅如此。您应该使用“doc.DocumentNode.SelectNodes”而不是“doc.DocumentNode.SelectSingleNode”。无论如何,您可以将代码用作工作示例,因为我已经针对您的网站对其进行了测试
    • 哦,我说的是您的代码,而不是问题中的代码。另外,如果你没有注意到,我不是那个问的人:)
    • @shriek ааа,但说真的,在这种情况下它返回了空的非空集合。这并不重要,我可以添加这个检查,但我已经用调试器检查了它 - 当页面上没有这样的 div 时,cse 中的非空空集合
    • 啊,看来我得用最新版本来测试了,也许他们最终修复了这个“缺陷”变得更好,现在返回一个空集合。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-26
    • 1970-01-01
    • 1970-01-01
    • 2017-11-21
    相关资源
    最近更新 更多