【问题标题】:WGET incompletely spidered the target websiteWGET 未完全爬取目标网站
【发布时间】:2013-03-06 10:40:52
【问题描述】:

我的想法是使用 wget 创建一个非常大的博客的所有线程的完整列表(根据博客本身,线程总数为 50,000)。我在 --spider 模式下使用 wget 来抓取网站并将 URL 输出到文本文件中。在 1d 3h 3m 3s wget 完成它的工作后,我发现“只有”9668 个文件与网站上提供的 50,000 个文件相比。根据 wget 643 链接被破坏所以我的第一个想法是检查丢失的线程是否与断开的链接有某种关系,但显然它们不是。该博客将其主题保存在以年和月命名的文件夹中(例如 /2012/01/name_of_thread.html)。一些断开的链接似乎是指 wget 从中下载一些线程的文件夹,因此我将排除所选文件夹的中断。丢失的线程(我在浏览博客时找到的)似乎来自 wget 正确下载其他几个线程的同一文件夹。

我从哪里开始了解出了什么问题?

【问题讨论】:

  • 如果您可以控制该站点,则进行 sql 转储会更简单。如果不确定您是否有权下载该数据?
  • 不,我无法控制网站。我只是看看发布的内容。

标签: wget


【解决方案1】:

有时博客发布/托管平台使用不寻常的 robots.txt 文件,因此可能需要 -e robots=off。我在爬取 WordPress 博客时遇到了类似的问题,其中奇怪的输出被机器人排除所塑造 - 这与您的问题有些相似。

根据博客的结构,您可能会通过更仔细的抓取获得更好的结果。如果它使用分页(www.site.com/archive/1/、www.site.com/archive/2/...),您可以通过 for 循环抓取每个页面并解析每个页面的内容。这将为您提供更可控的结果,因为您可以针对一小部分数据(例如,一次十页线程)而不是一次全部 50k 线程进行验证和测试。

该网站也可能报告错误的数字 - 您确定应该有 50k 个线程吗?

【讨论】:

  • 不,我不确定 50k 是多少,但我确信 wget 没有抓取到很多线程。我通过浏览网站很容易找到丢失的线程,我不必搜索很长时间,实际上找到一个被抓取的线程更难。我试图抓取一些 www.site.com/archive/1/ 但在这种情况下 wget 不返回任何 url,可能它找不到任何索引。我现在正在查看 PhpCrawl。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-24
  • 2019-07-19
  • 2011-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多