python - 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 文件中返回感到困惑。
解决方案
这是语法错误,请尝试按如下方式更新您的代码:
yield {
"review": reviews
}
因为你的前面什么都没有yield
,基本上你在做的是yield None
,这就是为什么你的json文件是空的。
推荐阅读
- hbase - hbase shell:人类可读与二进制键/值
- android - 当带有某些来源的图像时,React Native 签名的 apk 崩溃,在开发中工作正常
- ios - Swift 为 UIButton 样式创建通用类
- apache-flink - Flink 滑动计数窗口行为
- javascript - 使用 for 循环将值添加到数组
- c++ - 从 CLion 启动 OpenCV 窗口
- ios - 如何从共享类获取 JSON 响应数据到 ViewController?
- python - python中的列表和多处理
- python - 求解 Frenet 框架的非线性 ODE 系统
- php - 选择一个月中每一天的计数