[英]scrapy run spider from script
我想通过脚本而不是scrap crawl
来运行我的蜘蛛
我找到了这个页面
http://doc.scrapy.org/en/latest/topics/practices.html
但实际上并没有说明该脚本的放置位置。
有什么帮助吗?
这很简单直接:)
只需检查官方文档即可 。 我会做一些更改,以便您可以控制蜘蛛仅在执行python myscript.py
时运行,而不是每次从其导入时都运行。 只需添加一个if __name__ == "__main__"
:
import scrapy
from scrapy.crawler import CrawlerProcess
class MySpider(scrapy.Spider):
# Your spider definition
pass
if __name__ == "__main__":
process = CrawlerProcess({
'USER_AGENT': 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)'
})
process.crawl(MySpider)
process.start() # the script will block here until the crawling is finished
现在将文件另存为myscript.py
并运行'python myscript.py`。
请享用!
幸运的是,scrapy源是开放的,因此您可以按照抓取命令的工作方式进行操作,并在代码中进行相同的操作:
...
crawler = self.crawler_process.create_crawler()
spider = crawler.spiders.create(spname, **opts.spargs)
crawler.crawl(spider)
self.crawler_process.start()
您可以只创建一个普通的Python脚本,然后使用Scrapy的命令行选项runspider
,它使您无需创建项目即可运行蜘蛛。
例如,您可以使用以下内容创建一个文件stackoverflow_spider.py
:
import scrapy
class QuestionItem(scrapy.item.Item):
idx = scrapy.item.Field()
title = scrapy.item.Field()
class StackoverflowSpider(scrapy.spider.Spider):
name = 'SO'
start_urls = ['http://stackoverflow.com']
def parse(self, response):
sel = scrapy.selector.Selector(response)
questions = sel.css('#question-mini-list .question-summary')
for i, elem in enumerate(questions):
l = scrapy.contrib.loader.ItemLoader(QuestionItem(), elem)
l.add_value('idx', i)
l.add_xpath('title', ".//h3/a/text()")
yield l.load_item()
然后,如果正确安装了scrapy,则可以使用以下命令运行它:
scrapy runspider stackoverflow_spider.py -t json -o questions-items.json
你为什么不这样做呢?
from scrapy import cmdline
cmdline.execute("scrapy crawl myspider".split())
将该脚本放在您放置scrapy.cfg
的相同路径中
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.