【发布时间】:2012-06-08 05:58:43
【问题描述】:
例如,在 scrapy 中,如果我有两个包含不同 HTML 的 URL。现在我想为一个单独编写两个蜘蛛,并希望同时运行两个蜘蛛。在 scrapy 中是否可以同时运行多个蜘蛛。
在scrapy中写了多个蜘蛛后,我们如何安排它们每6小时运行一次(可能像cron作业)
我不知道上面的内容,你能用一个例子来建议我如何执行上面的事情吗?
提前致谢。
【问题讨论】:
标签: python scrapy web-crawler
例如,在 scrapy 中,如果我有两个包含不同 HTML 的 URL。现在我想为一个单独编写两个蜘蛛,并希望同时运行两个蜘蛛。在 scrapy 中是否可以同时运行多个蜘蛛。
在scrapy中写了多个蜘蛛后,我们如何安排它们每6小时运行一次(可能像cron作业)
我不知道上面的内容,你能用一个例子来建议我如何执行上面的事情吗?
提前致谢。
【问题讨论】:
标签: python scrapy web-crawler
从操作系统级别一次运行两个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()
如果您想查看抓取的完整日志,请在您的settings.py 中设置LOG_FILE。
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 运行。
【讨论】: