例如,在scrapy 中,如果我有两个包含不同 HTML 的 URL。现在我想为一个单独编写两个蜘蛛,并希望同时运行两个蜘蛛。在 scrapy 中是否可以一次运行多个蜘蛛。
在编写多个蜘蛛后的scrapy中,我们如何安排它们每6小时运行一次(可能就像cron作业)
我不知道上面,你能建议我如何用一个例子来执行上面的事情。
提前致谢。
例如,在scrapy 中,如果我有两个包含不同 HTML 的 URL。现在我想为一个单独编写两个蜘蛛,并希望同时运行两个蜘蛛。在 scrapy 中是否可以一次运行多个蜘蛛。
在编写多个蜘蛛后的scrapy中,我们如何安排它们每6小时运行一次(可能就像cron作业)
我不知道上面,你能建议我如何用一个例子来执行上面的事情。
提前致谢。
从操作系统级别一次运行两个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 整除的任何时间或每六小时运行一次脚本。
您可以尝试使用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"
您应该使用 scrapyd 来处理多个爬虫 http://doc.scrapy.org/en/latest/topics/scrapyd.html
这里是允许你在 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 一起运行。