c# - html敏捷得不到结果

标签 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/>");
    }
}

最佳答案

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

所以你应该考虑到这一点。在这种情况下,您将变成没有 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));
    }
}

关于c# - html敏捷得不到结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12129251/

相关文章:

c# - 如何使用 Swashbuckle 从 WebAPI 上的 Swagger 文档中省略方法

c# - 分组枚举最佳实践

c# - 具有内部抽象成员的公共(public)类

python - 如何使用 BeautifulSoup 保存页面中的所有图像?

Python Selenium 错误 : "WebDriverException: ' login' executable needs to be in PATH.“

c# - 自定义事件多次触发

c# - 在静态方法中使用语句/调用 Dispose

.net - 如果用户不是管理员,则在 Azure 中运行 exe 时 RoleEnvironment.IsAvailable == false

c# - WCF从客户端发送int[]到服务器

vba - 宏使用 serverxmlhttp 请求获取部分响应