在scrapy中,例如,如果我有两个包含不同HTML的URL。现在我想为一个人编写两个单独的蜘蛛,并且想要同时运行两个蜘蛛。在scrapy中,可以同时运行多个蜘蛛。
在编写多个蜘蛛后的scrapy中,我们如何安排它们每6小时运行一次(可能就像cron工作一样)
我上面不知道,你能用一个例子建议我如何执行上述事情。
提前致谢。
答案 0 :(得分:2)
从操作系统级别一次运行两个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
第一个*是分钟,然后是小时等,而asterik是通配符。因此,这表示在任何时间运行脚本,其中小时可以被6整除,或者每6小时整除一次。
答案 1 :(得分:2)
您应该使用scrapyd来处理多个抓取工具 http://doc.scrapy.org/en/latest/topics/scrapyd.html
答案 2 :(得分:1)
您可以尝试使用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()
如果您想查看抓取的完整日志,请在LOG_FILE
中设置settings.py
。
LOG_FILE = "logs/mylog.log"
答案 3 :(得分:0)
这里的代码允许您在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()
然后你可以安排这个python程序与cronjob一起运行。