Python 如何从yield中获取结果并保存到文件?
我正在练习使用Scrapy webcrawler软件包,我有一个由两部分组成的问题,因为我有点想知道下一步该怎么做:Python 如何从yield中获取结果并保存到文件?,python,python-3.x,scrapy,Python,Python 3.x,Scrapy,我正在练习使用Scrapy webcrawler软件包,我有一个由两部分组成的问题,因为我有点想知道下一步该怎么做: 我有一个名为spider4Techcrunch.py的脚本,其中包含以下代码: import scrapy from scrapy import cmdline class TCSpider(scrapy.Spider): name = "techcrunch" def start_requests(self): urls = [
spider4Techcrunch.py
的脚本,其中包含以下代码:
import scrapy
from scrapy import cmdline
class TCSpider(scrapy.Spider):
name = "techcrunch"
def start_requests(self):
urls = [
"https://techcrunch.com/"
]
for url in urls:
yield scrapy.Request(url=url, callback=self.parse)
def parse(self, response):
SET_SELECTOR = ".post-block__title"
output = "--BEGIN OUTPUT--"
print(output)
for data in response.css(SET_SELECTOR):
print('--BEGIN DATA--')
print(data)
TITLE_SELECTOR = "a ::text"
URL_SELECTOR = "a ::attr(href)"
yield {
'title': data.css(TITLE_SELECTOR).extract_first(),
'url':data.css(URL_SELECTOR).extract_first(),
}
scrapy.cmdline.execute("scrapy runspider spider4Techcrunch.py".split())
当我执行代码时,一切都正常工作并返回结果。我正在努力使用yield
命令。如何从yield
命令中提取KEY:VALUE
对“title”:“url”
的文本结果,以便将结果逐行保存到文本文件中作为脚本运行scrapy应用程序的首选方式-
您可以使用一个内置的
在您的情况下,it解决方案如下(对于scrapy 2.1版):
您可以通过使用项目管道从产量中保存结果 步骤1)您必须像这样编写项目管道
class PricePipeline:
vat_factor = 1.15
def process_item(self, item, spider):
if item.get('price'):
if item.get('price_excludes_vat'):
item['price'] = item['price'] * self.vat_factor
return item
else:
raise DropItem("Missing price in %s" % item)
步骤2)您必须修改设置。py
ITEM_PIPELINES = {
'your.pipelines.class': 300,
}
有关更多详细信息,请参阅刚刚测试过的。绝对漂亮。谢谢@Georgiy的帮助!
class PricePipeline:
vat_factor = 1.15
def process_item(self, item, spider):
if item.get('price'):
if item.get('price_excludes_vat'):
item['price'] = item['price'] * self.vat_factor
return item
else:
raise DropItem("Missing price in %s" % item)
ITEM_PIPELINES = {
'your.pipelines.class': 300,
}