首页 > 解决方案 > Scrapy spider 记录我需要的文本(也可以在 scrapy shell 中工作),但不会将它们写入 JSON 文件

问题描述

我对scrapy. 我试图从这个页面上抓取评论:https ://utopia.de/produkt/jj-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)

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

scrapy runspider utopia.py -o utopia.json

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

标签: pythonscrapy

解决方案


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

yield {
    "review": reviews
}

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


推荐阅读