scrapy运行方法为命令行输入
scrapy crawl spider
当我们需要在脚本中运行时,可以这样:
from scrapy import cmdline
cmdline.execute('scrapy crawl spider'.split())
当我们一个项目里有多个爬虫时,如果使用上述方法,只会运行第一个爬虫
from scrapy import cmdline
cmdline.execute('scrapy crawl spider1'.split())
cmdline.execute('scrapy crawl spider2'.split())
cmdline.execute('scrapy crawl spider3'.split())
###只会运行第一个###
这时候我们需要:
import os
os.system('scrapy crawl spider1')
os.system('scrapy crawl spider2')
os.system('scrapy crawl spider3')
建议在创建爬虫项目spider时,将spider文件名称和name命名为相同,这是我们想运行所有爬虫时就可以这样:
# coding=utf-8
import os
import time
def file_name(file_dir):
for root, dirs, files in os.walk(file_dir):
return files
if __name__ == '__main__':
for item in file_name('./spiders'):
if item[-2:]=='py':
if item == '__init__.py':
continue
print('scrapy crawl {}'.format(item[:-3]))
os.system('scrapy crawl {}'.format(item[:-3]))
也可以通过修改scrapy Command类来实现:
新建一个crawlall.py,复制scrapy Comman类并继承ScrapyCommand:
重写run()方法:
def run(self, args, opts):
# settings = get_project_settings()
spider_loader = self.crawler_process.spider_loader
for spidername in args or spider_loader.list():
self.crawler_process.crawl(spidername, **opts.spargs)
print('此时启动的爬虫为:%s' % spidername)
self.crawler_process.start()
并在settings中配置:
COMMANDS_MODULE = 'website.commands'
这时,命令行输入
scrapy list
就可以看到多了一个scrapy crawlall命令
运行即可运行所有spiders