Scrapy Spider записывает нужный мне текст (работает и в Scrapy Shell), но не записывает их в файл JSON - PullRequest
2 голосов
/ 06 ноября 2019

Я довольно новичок в 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)

Ноyield часть моего паука, похоже, не работает, потому что, когда я запускаю эту команду, я получаю пустой JSON файл:

scrapy runspider utopia.py -o utopia.json

У меня есть догадка, что отзывы отображаютсяс Javascript, но я не совсем понимаю, почему текст по-прежнему записывается правильно, но не может быть возвращен в файл JSON.

1 Ответ

2 голосов
/ 06 ноября 2019

Это синтаксическая ошибка, попробуйте обновить ваш код следующим образом:

yield {
    "review": reviews
}

Поскольку перед вашим yield ничего нет, в основном то, что вы делаете, это yield None, этопочему ваш файл json пуст.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...