【问题标题】:Scrapy : preventive measures before running the scrapeScrapy : 运行前的预防措施
【发布时间】:2015-01-12 22:06:57
【问题描述】:

我即将抓取一个房地产网站的大约 50.000 条记录(使用 Scrapy)。 编程已经完成并经过测试,并且数据库设计正确。

但我想为突发事件做好准备。 那么,我如何才能完美地实际运行刮擦,并且将失败和时间损失的风险降至最低呢?

更具体地说:

  • 我应该分阶段进行(小批量刮)吗?
  • 我应该记录什么以及如何记录?
  • 在启动之前我还应该考虑哪些其他注意事项?

【问题讨论】:

    标签: python web-scraping scrapy web-crawler


    【解决方案1】:

    首先,学习以下主题,大致了解如何成为一名优秀的网络爬虫公民:


    一般来说,首先,您需要确保在法律上允许您抓取此特定网站并遵守他们的使用条款规则。另外,检查网站的robots.txt 并遵守那里列出的规则(例如,可以设置Crawl-delay 指令)。此外,一个好主意是联系网站所有者,让他们知道您将要做什么或请求许可。

    通过明确指定 User-Agent 标头来识别自己。

    另见:


    我应该分阶段进行(小批量刮)?

    这就是DOWNLOAD_DELAY 设置的意义所在:

    下载程序应该等待的时间(以秒为单位) 从同一网站下载连续页面。这个可以用 限制爬取速度以避免对服务器造成太大影响。

    CONCURRENT_REQUESTS_PER_DOMAINCONCURRENT_REQUESTS_PER_IP 也是相关的。

    调整这些设置,以免过于频繁地访问网站服务器。

    我应该记录什么以及如何记录?

    Scrapy 在控制台上提供的信息非常广泛,但您可能希望记录在抓取时引发的所有错误和异常。我个人喜欢监听 spider_error 信号的想法,请参阅:

    之前我应该​​考虑哪些其他注意点 发射? 你还有几件事要考虑。

    在某些时候,您可能会被禁止。这总是有原因的,最明显的是你仍然会用力爬行它们并且它们不喜欢它。有一些技术/技巧可以避免被禁止,例如轮换 IP 地址、使用代理、云端网络抓取等,请参阅:

    另一件需要担心的事情可能是爬行速度和缩放;此时您可能要考虑分发您的爬取过程。这是那里scrapyd 会有所帮助,请参阅:

    不过,请确保您没有越界并保持合法。

    【讨论】:

    • +1 总结了我试图写的内容。 =) 其他可能有用的设置是CONCURRENT_REQUESTS_PER_{DOMAIN,IP},还有Autothrottle extension
    • @elias 谢谢,添加了关于CONCURRENT_REQUESTS_PER_{DOMAIN,IP} 设置的注释。感谢您对autothrottle 提出的意见。
    • 从道德方面全面回答。不过还是有一些实际的疑问。例如:如何在抓取过程中最大限度地减少软件/硬件问题或互联网连接丢失的负面影响?
    • 至于批次,我并不是指DOWNLOAD_DELAY。我在问自己,首先抓取 10.000 个第一条记录,然后是下一个 10.000 个(在不同的运行中)等等是否有任何优势......
    • @SLeon 至于网络连接丢失,Scrapy 内置了RetryMiddleware - 默认情况下,如果页面没有下载,它会重试 2 次。至于批次,我不确定将记录拆分为单独的连续运行有什么好处。
    猜你喜欢
    • 2021-05-01
    • 2019-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-06
    • 1970-01-01
    相关资源
    最近更新 更多