抓取一个大型网站,处理超时

时间:2013-06-12 10:26:23

标签: ruby-on-rails ruby web-scraping nokogiri web-crawler

我希望你能帮助我。我正在尝试抓取一个包含4500个链接的网站,其中包含信息。所以结构是这样的:

第1层(只是不同的类别)
      第2层(包含不同主题)
           第3层(包含主题信息)

所以我的脚本在一个循环中打开每个类别 - 然后按主题打开主题并从第3层中提取所有信息。但是因为有4500个主题,我有问题,我有时会有一个超时错误,在此之后我必须从头开始尝试(有时在200个主题之后,其他时间在2200个主题之后)。我的问题是我怎么能以正确的方式做到这一点,所以如果崩溃我可以继续下一个崩溃之前的主题,而不是从头开始。我是Ruby和Crawling的新手,非常感谢每一条建议。

谢谢!

2 个答案:

答案 0 :(得分:1)

Stack Overflow会定期弹出这类问题。在编写单页刮刀或整个站点蜘蛛时,需要考虑许多事项。

有关详情,请参阅“DRY search every page of a site with nokogiri”和“What are some good Ruby-based web crawlers?”以及“What are the key considerations when creating a web crawler?”。这些内容涵盖了我在写蜘蛛时所做的很多事情。

答案 1 :(得分:0)

您肯定应该拆分解析器例程并同时将临时数据保存到DB中。

我的方法是:

  1. 抓取第1层以收集类别。将它们保存到临时DB中。
  2. 使用数据库,抓取第2层以收集主题列表。将它们保存到DB中。
  3. 使用数据库,抓取第3层以获取实际内容。将它们保存到DB中,如果发生错误则跳过/重试。