首页 > 解决方案 > 从抓取的链接下载所有 PDF 文件

问题描述

在运行代码时,它说它ProductListPage为空,并且在删除错误后不会继续前进。

任何想法如何解决这个问题?等到//div[@class='productContain padb6']//div[@class='large-4 medium-4 columns']/a被发现还是别的什么?

这是我当前的代码:

HtmlDocument htmlDoc = new HtmlWeb().Load("https://example.com/");
HtmlNodeCollection ProductListPage = htmlDoc.DocumentNode.SelectNodes("//div[@class='productContain padb6']//div[@class='large-4 medium-4 columns']/a");
foreach (HtmlNode src in ProductListPage)
{
    htmlDoc = new HtmlWeb().Load(src.Attributes["href"].Value);

    HtmlNodeCollection LinkTester = htmlDoc.DocumentNode.SelectNodes("//div[@class='row padt6 padb4']//a");
    if (LinkTester != null)
    {
        foreach (var dllink in LinkTester)
        {
            string LinkURL = dllink.Attributes["href"].Value;
            Console.WriteLine(LinkURL);

            string ExtractFilename = LinkURL.Substring(LinkURL.LastIndexOf("/"));
            var DLClient = new WebClient();

            DLClient.DownloadFileAsync(new Uri(LinkURL), @"C:\temp\" + ExtractFilename);
        }
    }
}

编辑:

代码似乎在没有 VPN 连接的情况下工作,但它不适用于 VPN。我有使用 Python 和 BeautifulSoup 的替代方案,无论 VPN 连接如何,它都能正常工作。有什么想法为什么 C# 和 htmlAgilityPack 不成功吗?


编辑2:

我注意到 VPN 连接页面的加载有一点延迟。第一个页面正在加载,然后是内容。

标签: c#web-scrapingweb-crawlerhtml-agility-pack

解决方案


确保您可以访问该站点(防火墙或其他应用程序可能不允许访问)。

当我运行 Visual Basic 和 .Net 的代码时,我可以访问子站点,甚至可以查找 Pdf 链接。我建议使用调试器

  1. 检查您是否可以在浏览器中访问该站点。
  2. 如果您可以访问该站点,请使用调试器查看您拥有的 InnerHtmlhtmlDoc.DocumentNode
  3. 如果你得到数据,把它复制到记事本,看看标签是否在那里。您应该有一个完整的 HTML 文档。
  4. 对于代理服务器,将信息添加到负载调用。https://stackoverflow.com/a/12099646/1390548

推荐阅读