在Scrapy中运行多个爬虫

8
  1. 例如,在Scrapy中,如果我有两个包含不同HTML的URL。现在我想为每个URL编写一个单独的蜘蛛,并同时运行这两个蜘蛛。在Scrapy中,是否可以同时运行多个蜘蛛。

  2. 在Scrapy中编写多个蜘蛛后,如何安排它们每6小时运行一次(类似于cron作业)

对此我不知道,您能否给出示例以执行上述操作。

提前致谢。

4个回答

5
您可以尝试使用 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"

4

最简单的方法可能是从操作系统级别同时运行两个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整除,或者每六个小时运行一次。


非常感谢您的回复,不介意我问一下,您能否给出一个示例代码,这样会更有帮助,我可以进一步完善它。 - Shiva Krishna Bavandla

3

以下是允许您在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程序。


2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接