我正在编写自己的网络爬虫,以查找网站上的不良链接并每晚动态创建站点地图。我传入一个起始 URL,下拉内容,然后使用 HtmlAgilityPack 抓取页面以查找链接到另一个 url、图像、css、javascript 文件的任何内容。我建立了一个 URL 列表来检查并记录每个 URL 的状态。
它工作得很好,除了少数链接到外部站点的 URL 返回为“404 未找到”,但是当我转到 HtmlAgilityPack 尝试加载的 URL 时,该 URL 存在。并非所有外部链接都有此问题,大多数都返回正常。我提取文档的代码是:
var page = new HtmlWeb();
var tcs = new TaskCompletionSource<HttpWebResponse>();
page.PostResponse = delegate (HttpWebRequest request, HttpWebResponse response)
{
tcs.SetResult(response);
};
var doc = page.Load(pageAddress);
var httpWebResponse = tcs.Task.Result;
我怀疑这可能与 HtmlAgilityPack 用于调用页面的 HttpWebRequest 中的某些内容有关,但我不太确定。有什么想法吗?
编辑,这是一个例子: https://cdn.datatables.net/1.13.2/css/jquery.datatables.min.css
这个问题最终是我自己的错:我的应用程序强制 URL 小写,显然这个 CDN 是区分大小写的。
如果你去
https://cdn.datatables.net/1.13.2/css/jquery.dataTables.min.css
该网址有效,但是
https://cdn.datatables.net/1.13.2/css/jquery.datatables.min.css
是404。