【问题标题】:How to call 2 Scrapy spiders in one python script?如何在一个 python 脚本中调用 2 个 Scrapy 蜘蛛?
【发布时间】:2021-08-07 05:26:04
【问题描述】:

我正在使用 Scrapy CrawlSpider 类来抓取电子商务网站的类别页面。问题是,大约 5% 的请求在 5 次重试后被拒绝,并且不会达到 100% 的已知类别。

我的修复涉及第二个蜘蛛 (scrapy.Spider),它从数据库中获取丢失的已知 URL,然后简单地重新抓取它们。这样我就达到了 100%。

问题是,它们是 2 个不同的蜘蛛,它们位于 2 个不同的 python 文件中,需要分别由 cron 作业触发。此外,我只是将 parse_item 函数复制到另一个刮板,如果需要,现在需要对两个刮板进行更改。

class myspider(CrawlSpider):
    name = 'categories'
    ...
    def parse_item(self, response):
        ...
        yield item


class myspider(scrapy.Spider):
    name = 'recrawler'
    ...
    def parse_item(self, response):
        ...
        yield item

如何扩展 CrawlSpider 类以在每个完成的循环后重新爬行或以某种方式调用另一个蜘蛛?

【问题讨论】:

    标签: python scrapy


    【解决方案1】:

    问题是,大约 5% 的请求在 5 次重试后被拒绝,并且不会达到 100% 的已知类别。

    增加DOWNLOAD_DELAY 并降低CONCURRENT_REQUESTS_PER_DOMAIN。或者使用一些代理并在每个请求上轮换它。

    不要通过引入另一个问题来解决问题。

    顺便说一句,scrapy 确实支持启动多个蜘蛛并并行运行它们。查看文档Running multiple spiders in the same process

    【讨论】:

    • 下载延迟为 30 秒,我正在使用代理。仍然是 5%
    • 这些重试页面是否损坏,或者仅仅是因为它们识别了蜘蛛并禁止了您? @merlin
    • 不,当重新抓取工作时,肯定是在工作。我得到一个拒绝的回应。增加到 30 多岁以上不是一个选择,因为我需要在一天结束之前完成循环。