Scrapy是基於所述扭曲框架。 Twisted是基於事件循環的框架,所以它可以進行預定的處理而不是多處理。這就是爲什麼您的scrapy爬行只在一個進程上運行。現在,您可以使用下面的代碼
import scrapy
from scrapy.crawler import CrawlerProcess
class MySpider1(scrapy.Spider):
# Your first spider definition
...
class MySpider2(scrapy.Spider):
# Your second spider definition
...
process = CrawlerProcess()
process.crawl(MySpider1)
process.crawl(MySpider2)
process.start() # the script will block here until all crawling jobs are finished
技術上開始兩隻蜘蛛並沒有什麼阻止你有兩種蜘蛛同一類。
process.crawl
方法需要*args
和**kwargs
傳遞給你的蜘蛛。所以你可以使用這種方法參數化你的蜘蛛。比方說,你的蜘蛛是假設抓取100頁,您可以添加一個start
和end
參數檢索器類,並完成類似下面
process.crawl(YourSpider, start=0, end=50)
process.crawl(YourSpider, start=51, end=100)
注意,這兩個爬蟲都會有自己的設置,因此,如果您有16個請求爲您的蜘蛛設置,那麼兩者結合將有效地有32個。
在大多數情況下,抓取少於CPU和更多關於網絡訪問,實際上是非阻塞的情況下扭曲,所以我不確定這會給你一個非常大的優勢,反對在單個蜘蛛中設置CONCURRENT_REQUEST
到32
。
PS:考慮閱讀本頁面以瞭解更多https://doc.scrapy.org/en/latest/topics/practices.html#running-multiple-spiders-in-the-same-process