2017-10-23 1 views
0

Ich versuche, den Text der Bewertungen auf Amazon mit scrapy zu kratzen. Das Problem besteht darin, dass der Text in einem span-Element durch < br> -Tags getrennt ist, wenn eine Überprüfung aus mehreren Eingängen besteht. Also, wenn ich die erste Rezension kratzen will verwende ich diese Codezeile:<br> Tags verschraubt meine Daten mit Scrapy und Python

response.css('span.a-size-base.review-text::text').extract_first() 

Dies mir nicht gibt die gesamten Text der Überprüfung, sondern nur den Text zwischen dem < span> Elemente und den ersten < br> Element.

Ich weiß, wenn ich "extract_first()" durch "extract()" ersetzen, werde ich den gesamten Text erhalten. Dies gibt mir aber auch den Text der anderen Bewertungen.

Im Grunde gibt die Methode extract() ein Array mit den Elementen zurück, die durch < br> -Tags getrennt sind. Ich brauche es getrennt durch die < span> Tags.

Gibt es eine Möglichkeit, den gesamten Text zwischen dem offenen < Bereich und dem abschließenden </span> Element zu scrappen?

Beispiel HTML-Code:

< span data-hook="review-body" class="a-size-base review-text"> 
    "I like this product, the reasons why are explained below" 
    <br> 
    <br> 
    "1. It looks nice" 
    <br> 
    "2. I love it" 
</span> 

, wie es auf der Website aussieht:

ich dieses Produkt mögen, sind die Gründe, warum unten erklärt

  1. Es sieht gut aus
  2. Ich liebe es

Ausgang I wird mit extract_first() erhalten:

"Ich mag dieses Produkt, die Gründe, warum werden im Folgenden erläutert"

Output Ich werde Extrakt erhalten mit() (beachten Sie, dass es besteht aus drei Elementen):

"Ich mag dieses Produkt, die Gründe, warum unten erklärt werden", "1. Es sieht gut aus ", " 2. Ich liebe es „

Ausgang I (nur ein Element, die Überprüfung selbst) erhalten möchten:

“ Ich mag dieses Produkt, warum die Gründe unter 1. erläutert Es sieht schön 2. Ich liebe es“

Antwort

0

Verwendung extract() und die Liste beizutreten.

>>> text=["I like this product, the reasons why are explained below", "1. It looks nice", "2. I love it"] 
>>> " ".join(text) 
'I like this product, the reasons why are explained below 1. It looks nice 2. I love it' 
+0

ich eine Bewertung als Beispiel verwendet. Wenn es weitere Bewertungen auf der Seite ist, wird die Ausgabe von extract() von mehr Bewertungen bestehen. Wenn ich Join (Text) verwenden würde, würde ich den Text aller Bewertungen haben kombiniert in einem Element. – scrapitnow

+0

Gibt es noch ein Problem? –

+0

ja, vielleicht ist meine Frage nicht klar. aber wenn es zum Beispiel 2 Bewertungen auf der Seite gibt und ich werde mitmachen (Text). Ich werde die 2 Bewertungen zusammen bekommen, aber ich möchte sie getrennt haben. – scrapitnow