例如,在Scrapy中,如果我有两个包含不同HTML的URL。现在我想为每个URL编写一个单独的蜘蛛,并同时运行这两个蜘蛛。在Scrapy中,是否可以同时运行多个蜘蛛。
在Scrapy中编写多个蜘蛛后,如何安排它们每6小时运行一次(类似于cron作业)
对此我不知道,您能否给出示例以执行上述操作。
提前致谢。
例如,在Scrapy中,如果我有两个包含不同HTML的URL。现在我想为每个URL编写一个单独的蜘蛛,并同时运行这两个蜘蛛。在Scrapy中,是否可以同时运行多个蜘蛛。
在Scrapy中编写多个蜘蛛后,如何安排它们每6小时运行一次(类似于cron作业)
对此我不知道,您能否给出示例以执行上述操作。
提前致谢。
CrawlerProcess
。from scrapy.utils.project import get_project_settings
from scrapy.crawler import CrawlerProcess
from myproject.spiders import spider1, spider2
1Spider = spider1.1Spider()
2Spider = spider2.2Spider()
process = CrawlerProcess(get_project_settings())
process.crawl(1Spider)
process.crawl(2Spider)
process.start()
settings.py
中设置LOG_FILE
。LOG_FILE = "logs/mylog.log"
最简单的方法可能是从操作系统级别同时运行两个Scrapy脚本。它们都应该能够保存到同一个数据库中。创建一个shell脚本来调用这两个Scrapy脚本以同时执行它们:
scrapy runspider foo &
scrapy runspider bar
请确保使用 chmod +x script_name
命令使该脚本可执行。
若要每隔6小时安排一个cronjob,请在终端中输入crontab -e
,并按以下方式编辑文件:
* */6 * * * path/to/shell/script_name >> path/to/file.log
第一个 * 代表分钟,第二个 * 代表小时,以此类推,* 是通配符。因此,这表示在任何时间运行脚本,其中小时能够被6整除,或者每六个小时运行一次。
以下是允许您在Scrapy中运行多个爬虫的代码。 将此代码保存在与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()
然后您可以使用cronjob计划运行此Python程序。