c# - 从抓取的链接下载所有 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 连接页面的加载有一点延迟。第一个页面正在加载,然后是内容。
解决方案
确保您可以访问该站点(防火墙或其他应用程序可能不允许访问)。
当我运行 Visual Basic 和 .Net 的代码时,我可以访问子站点,甚至可以查找 Pdf 链接。我建议使用调试器
- 检查您是否可以在浏览器中访问该站点。
- 如果您可以访问该站点,请使用调试器查看您拥有的 InnerHtml
htmlDoc.DocumentNode
- 如果你得到数据,把它复制到记事本,看看标签是否在那里。您应该有一个完整的 HTML 文档。
- 对于代理服务器,将信息添加到负载调用。https://stackoverflow.com/a/12099646/1390548
推荐阅读
- python - python中〜符号的目的是什么?
- jdbc - 跨多个数据库的 HSQLDB INSERT/SELECT
- jquery - jQuery html函数异步而不是同步
- python - 如何将 MJPEG 流写入文件的正确方法是什么
- flutter - Flutter 通过提供者访问推送页面上的通知程序
- r - 限制 ggplot2 轴的因子数
- list - 如何在 SwiftUI 列表中显示排序的递归数据结构?
- java - 如何在 Java 中检查字符串的多个条件?
- c# - 抽象类属性导致 JSON.NET 在反序列化期间抛出
- mysql - 无法连接到 docker 容器外的 mariadb