新的python,来自javascript。
我尝试使用for循环追加到plates
列表,然后将结果生成到一个文件中--但我认为yield关键字在追加发生之前就已经触发了。我不完全确定这是否是问题所在。
我应该使用global
吗?我应该使用asyncio
吗?
不确定是否相关,但这是一个由scrapy crawl data_spider -o data_spider_results.json:'jsonlines'
发起的零碎项目
谢谢你的帮助!
class DataSpider(scrapy.Spider):
name = 'data_spider'
allowed_domains = ['www.scraped-site.com']
start_urls = ['http://www.scraped-site.com']
def parse(self, response):
table = response.xpath('//table[2]')
plates = []
for tr in table.xpath('.//tr'):
b = tr.xpath('.//b//text()')
name = b.get()
ingredients = []
p = tr.xpath('.//p//text()')
ingredients.append(p.get())
plate = {"name": name, "ingredients": ingredients}
plates.append(plate)
yield plates
1条答案
按热度按时间2izufjch1#
当使用scrapy时,您只能从任何解析回调中生成
scrapy.Item
、dict
ionary或request
对象。您使用
append
没有问题。您可能最好生成每个单独的板,特别是因为您在scrapy命令中指明使用的是jsonlines格式。
例如: