在scrapy中并行运行多个蜘蛛并行1个网站?

par*_*rik 6 python web-crawler scrapy web-scraping scrapy-spider

我想用2个部分抓取一个网站,我的脚本没有我需要的那么快.

是否可以发射2个蜘蛛,一个用于刮第一部分,第二个用于第二部分?

我试着有两个不同的类,然后运行它们

scrapy crawl firstSpider
scrapy crawl secondSpider
Run Code Online (Sandbox Code Playgroud)

但我认为这不聪明.

我阅读了scrapyd文档,但我不知道这对我的情况是否有益.

小智 9

我认为你要找的是这样的:

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
Run Code Online (Sandbox Code Playgroud)

您可以在以下位置阅读更多信息:在同一个进程中运行多个蜘蛛.

  • 如果说我有300只蜘蛛需要跑怎么办。可以保留此实现吗? (2认同)

Yud*_*ira 5

或者您可以像这样运行,您需要将此代码与scrapy.cfg保存在同一目录中(我的scrapy版本是1.3.3):

from scrapy.utils.project import get_project_settings
from scrapy.crawler import CrawlerProcess

setting = get_project_settings()
process = CrawlerProcess(setting)

for spider_name in process.spiders.list():
    print ("Running spider %s" % (spider_name))
    process.crawl(spider_name,query="dvh") #query dvh is custom argument used in your scrapy

process.start()
Run Code Online (Sandbox Code Playgroud)