Scrapy spider 记录我需要的文本(也可以在 scrapy shell 中工作),但不将它们写入 JSON 文件



我对scrapy相当陌生。我正试图从这个页面上抓取评论:https://utopia.de/produkt/j-j-darboven-cafe-intencion/所以我创建了这个蜘蛛:

import scrapy
class UtopiaSpider(scrapy.Spider):
name = 'utopia'
allowed_domains = ['utopia.de']
start_urls = ['https://utopia.de/produkt/j-j-darboven-cafe-intencion/']
def parse(self, response):
self.log("I just visited: " + response.url)
reviews = response.css('div.commenttext p:nth-child(1)::text').extract()
self.log(reviews)
yield
{
"review":reviews
}

当我尝试用以下代码在scrapy shell中抓取评论时:

scrapy shell https://utopia.de/produkt/j-j-darboven-cafe-intencion/
In [1]:  response.css('div.commenttext p:nth-child(1)::text').extract()

我能够看到评论:

Out[1]:
['Wir haben für unseren Vollautomaten wirklich lange probiert, und kommen immer wieder zu diesem. Die Bohnen sind alle ganz und nicht zu dunkel, also nicht billig überröstet. Der Geschmack ist wirklich super ohne bittere Note. Im Rewe gibt es immer mal wieder Sonderangebote der Marke, da kann man bis zu 3 € pro Packung sparen. Hier greifen wir dann immer zu. Der Kaffee lässt Genuss zu ohne schlechtes Gewissen.',
'Der Kaffee ist große Klasse, da gibt es nachwievor nix zu meckern dran. Aber Inhalt ist nicht alles. Die letzte Verpackung hat in der Papierhülle jetzt Plastik mit reingemischt. Ich frag mich, wozu das gut sein soll. Für mich ein Grund zum Punkteabzug.',
'Ich kehre seit Jahren nach Ausflügen zu anderen Kaffeesorten immer wieder zu diesem zurück, weil er mir am besten schmeckt. Ich mag Kaffee am liebsten mit einer „normalen“ Kaffeemaschine gekocht und nicht sehr stark. Dafür ist er super. Er ist nicht sehr stark geröstet und hat einen schönen Mokkageschmack.',
'Bereits seit sechs Jahren beginne ich den Tag mit diesem Kaffee, und er schafft es täglich aufs Neue, mich zu begeistern. Ich konsumiere ausschließlich fair produzierten Kaffee, um mit einem guten Gewissen in den Alltag starten zu können. Meine Wahl wird weiterhin auf diesen fallen. �']

我还可以在我的蜘蛛中用self.log(reviews)行记录评论

2019-11-06 15:44:06 [scrapy.core.engine] DEBUG: Crawled (200) <GET https://utopia.de/produkt/j-j-darboven-cafe-intencion/> (referer: None)
2019-11-06 15:44:06 [utopia] DEBUG: I just visited: https://utopia.de/produkt/j-j-darboven-cafe-intencion/
2019-11-06 15:44:06 [utopia] DEBUG: Wir haben für unseren Vollautomaten wirklich lange probiert, und kommen immer wieder zu diesem. Die Bohnen sind alle ganz und nicht zu dunkel, also nicht billig überröstet. Der Geschmack ist wirklich super ohne bittere Note. Im Rewe gibt es immer mal wieder Sonderangebote der Marke, da kann man bis zu 3 € pro Packung sparen. Hier greifen wir dann immer zu. Der Kaffee lässt Genuss zu ohne schlechtes Gewissen.
2019-11-06 15:44:06 [utopia] DEBUG: Der Kaffee ist große Klasse, da gibt es nachwievor nix zu meckern dran. Aber Inhalt ist nicht alles. Die letzte Verpackung hat in der Papierhülle jetzt Plastik mit reingemischt. Ich frag mich, wozu das gut sein soll. Für mich ein Grund zum Punkteabzug.
2019-11-06 15:44:06 [utopia] DEBUG: Ich kehre seit Jahren nach Ausflügen zu anderen Kaffeesorten immer wieder zu diesem zurück, weil er mir am besten schmeckt. Ich mag Kaffee am liebsten mit einer „normalen“ Kaffeemaschine gekocht und nicht sehr stark. Dafür ist er super. Er ist nicht sehr stark geröstet und hat einen schönen Mokkageschmack.
2019-11-06 15:44:06 [utopia] DEBUG: Bereits seit sechs Jahren beginne ich den Tag mit diesem Kaffee, und er schafft es täglich aufs Neue, mich zu begeistern. Ich konsumiere ausschließlich fair produzierten Kaffee, um mit einem guten Gewissen in den Alltag starten zu können. Meine Wahl wird weiterhin auf diesen fallen. �
2019-11-06 15:44:06 [scrapy.core.engine] INFO: Closing spider (finished)

但是我的spider的yield部分似乎不起作用,因为当我运行这个命令时,我最终会得到一个空的JSON文件:

scrapy runspider utopia.py -o utopia.json

我有一种预感,评论是用Javascript显示的,但我很困惑为什么文本仍然被正确记录,但不能在JSON文件中返回。

这是一个语法错误,请尝试按如下方式更新代码:

yield {
"review": reviews
}

因为yield前面什么都没有,所以基本上你正在做的是yield None,这就是为什么你的json文件是空的。

最新更新