在scrapy中运行多个蜘蛛

时间:2012-06-08 05:58:44

标签: python scrapy web-crawler

  1. 在scrapy中,例如,如果我有两个包含不同HTML的URL。现在我想为一个人编写两个单独的蜘蛛,并且想要同时运行两个蜘蛛。在scrapy中,可以同时运行多个蜘蛛。

  2. 在编写多个蜘蛛后的scrapy中,我们如何安排它们每6小时运行一次(可能就像cron工作一样)

  3. 我上面不知道,你能用一个例子建议我如何执行上述事情。

    提前致谢。

4 个答案:

答案 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一起运行。

相关问题