从 Python 运行 Scrapy

Posted

技术标签:

【中文标题】从 Python 运行 Scrapy【英文标题】:Scrapy run from Python 【发布时间】:2013-08-08 15:33:09 【问题描述】:

我正在尝试。我正在查看这段代码(source):

from twisted.internet import reactor
from scrapy.crawler import Crawler
from scrapy.settings import Settings
from scrapy import log
from testspiders.spiders.followall import FollowAllSpider

spider = FollowAllSpider(domain='scrapinghub.com')
crawler = Crawler(Settings())
crawler.configure()
crawler.crawl(spider)
crawler.start()
log.start()
reactor.run() # the script will block here

我的问题是我对如何调整这段代码来运行我自己的蜘蛛感到困惑。我已将我的蜘蛛项目称为“spider_a”,它指定了要在蜘蛛自身内爬行的域。

我要问的是,如果我使用以下代码运行我的蜘蛛:

scrapy crawl spider_a

如何调整上面的示例 python 代码来做同样的事情?

【问题讨论】:

【参考方案1】:

在 Scrapy 0.19.x(可能适用于旧版本)中,您可以执行以下操作。

spider = FollowAllSpider(domain='scrapinghub.com')
settings = get_project_settings()
crawler = Crawler(settings)
crawler.signals.connect(reactor.stop, signal=signals.spider_closed)
crawler.configure()
crawler.crawl(spider)
crawler.start()
log.start()
reactor.run() # the script will block here

您甚至可以直接从如下脚本调用命令:

from scrapy import cmdline
cmdline.execute("scrapy crawl followall".split())  #followall is the spider's name

看看我的回答here。我changed官方documentation所以现在你的爬虫使用你的设置并可以产生输出。

【讨论】:

【参考方案2】:

只需将其导入并传递给crawler.crawl(),例如:

from testspiders.spiders.spider_a import MySpider

spider = MySpider()
crawler.crawl(spider)

【讨论】:

以这种方式运行会忽略用户的设置。

以上是关于从 Python 运行 Scrapy的主要内容,如果未能解决你的问题,请参考以下文章

scrapyscrapy-redis 全国建筑市场基本信息采集

scrapy

scrapyscrapy 安装问题

scrapy项目创建

ScrapyScrapy爬虫框架的基本用法

Day537&538.scrapy爬虫框架 -python