scrapy 运行多爬虫

本文介绍如何使用Scrapy的CrawlerRunner类在同一进程中启动多个爬虫,通过示例代码展示多爬虫启动的配置与实现过程。文章还分享了一种通过在spiders目录下获取所有爬虫类并统一启动的策略,便于管理和扩展。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景:scrapy是支持多爬虫启动的,有两种方式.
你可以使用scrapy.crawler.CrawlerProcess这个类来运行你的spider,这个类会为你启动一个Twisted reactor,并能配置你的日志和shutdown处理器。所有的scrapy命令都使用这个类.
另外一个功能更强大的类是scrapy.crawler.CrawlerRunner,我用的就是这个,目前同时启动过7个爬虫,如果有文件读写操作,记得开启ulimit -n 2048.
多爬虫启动就是指同一进程启动多个爬虫.
import scrapy
from twisted.internet import reactor
from scrapy.crawler import CrawlerRunner
from scrapy.utils.log import configure_logging

class MySpider1(scrapy.Spider):
    # Your first spider definition
    ...

class MySpider2(scrapy.Spider):
    # Your second spider definition
    ...

configure_logging()
runner = CrawlerRunner()
runner.crawl(MySpider1)
runner.crawl(MySpider2)
d = runner.join()
d.addBoth(lambda _: reactor.stop())

reactor.run() # the script will block here until all crawling jobs are finished

上述示例是scrapy cookbook给的示例,我觉得一般不会那么写,应该在一个循环里启动爬虫,因为在这个迭代里,你可以做很多事情,例如筛出报错的爬虫(加了测试的)话.

那怎么来合适的启动多爬虫呢?
我这里说下思路,我是这么做的,在spiders的__init__写一个类获取spiders里的所有爬虫类,在在run.py引用这个类,这样你就获得了所有爬虫,runner.crawl()传入的是爬虫的类对象,命名要规范如XXXSpider,没有Spider,可能会出错.然后在迭代里启动爬虫,这样做有哪些好处呢?可以加入测试模块、定时模块等等。
scrapy cookbook链接
scrapy官方文档链接

在这里插入图片描述

Scrapy 内置了线程支持。默认情况下,Scrapy 使用单线程来执行爬虫,但是可以通过修改 `CONCURRENT_REQUESTS` 和 `CONCURRENT_REQUESTS_PER_DOMAIN` 等设置来启用线程支持。 具体来说,可以使用以下步骤启用线程支持: 1. 在 `settings.py` 文件中设置 `CONCURRENT_REQUESTS` 和 `CONCURRENT_REQUESTS_PER_DOMAIN`。例如,可以将 `CONCURRENT_REQUESTS` 设置为 16,将 `CONCURRENT_REQUESTS_PER_DOMAIN` 设置为 8,表示同时最有 16 个请求在运行且每个域名同时最有 8 个请求在运行。 ``` CONCURRENT_REQUESTS = 16 CONCURRENT_REQUESTS_PER_DOMAIN = 8 ``` 2. 修改 Spider,使其能够支持线程。可以通过设置 `custom_settings` 属性来实现。例如,可以设置 `DOWNLOAD_DELAY` 为 0,这将禁用爬虫的下载延迟,使其更加适合线程。 ``` class MySpider(scrapy.Spider): name = 'myspider' start_urls = ['http://example.com'] custom_settings = { 'DOWNLOAD_DELAY': 0, } def parse(self, response): # parse the response ``` 3. 运行爬虫时,使用 `-s CONCURRENT_REQUESTS=n` 选项来设置同时运行的请求数量。例如,可以使用以下命令来启动一个同时最有 32 个请求在运行爬虫: ``` scrapy crawl myspider -s CONCURRENT_REQUESTS=32 ``` 使用线程爬虫可以提高爬取效率,但也需要注意避免对目标网站造成太大的负担。同时,线程爬虫可能会导致一些不可预知的问题,例如网站反爬虫机制可能会误判为攻击行为。因此,在使用线程爬虫时,需要谨慎考虑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

笑笑布丁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值