如何在一个Python脚本中调用2个Scrapy蜘蛛?

问题描述 投票:0回答:2

我正在使用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
2个回答
0
投票

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

增加

DOWNLOAD_DELAY
并降低
CONCURRENT_REQUESTS_PER_DOMAIN
。或者使用一些代理并根据每个请求轮换它。

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

顺便说一句,

scrapy
确实支持启动多个蜘蛛并并行运行它们。检查文档在同一进程中运行多个蜘蛛


0
投票

CrawlProcess 类允许您通过为每个蜘蛛调用 process.crawl() 并调用 process.start() 来开始爬网,从而在一个脚本中顺序运行多个 Scrapy 蜘蛛。确保将模块路径替换为蜘蛛类的实际路径。

from scrapy.crawler import CrawlerProcess
from scrapy.utils.project import get_project_settings
from myproject.spiders.spider1 import Spider1
from myproject.spiders.spider2 import Spider2

process = CrawlerProcess(get_project_settings())
process.crawl(Spider1)
process.crawl(Spider2)
process.start()
© www.soinside.com 2019 - 2024. All rights reserved.