2017-01-22 14 views
0

Ich bin neu in Python und kratzig, aber war ich versuche, einen Crawler und Schaber zu entwickeln Liste der Produkte auf einer Amazon-Seite zu extrahieren,Scrapy Crawler Excel-Ausgabe

die geschabt info Namen haben muß, Preis und beste Verfügbarkeit . Items werden gekratzt, jedoch wird jedes Objekt, das gekratzt wird, wenn es in einer CSV-Datei ausgegeben wird, vollständig in einer einzigen Zelle gespeichert.

enter image description here

Alles, was ich will, ist jedes Produkt und seine entsprechenden Angaben zu machen deutlich in jeder Zelle ausgegeben werden.

Die Logik ist:

items= [] 
    for products in response.xpath('//*[@id="mainResults"]/ul'): 
     item = amazonlist() 

     item['Title'] = products.css('a>h2::text').extract() 
     item['Price'] = products.css(' div > div > div > a > span.a-size-base.a-color-price.s-price.a-text-bold::text').extract() 
     item['Prime'] = products.css(' div > div > div > i::attr(aria-label)').extract() 

     items.append(item) 
    return items 

Können Sie mir mit diesem Handbuch?

Antwort

0

Ich habe vor kurzem mit einigen Web-Verschrottungen gespielt. Die Art und Weise, wie ich Dinge von einer Webseite gezogen habe, besteht darin, lxml zu verwenden, um den HTML-Code zu erhalten, und diesen dann in einer Textdatei zu speichern und dann von dort aus zu sortieren.

Ich hoffe, ich half.

+1

Aber das würde immer noch menschliches Eingreifen erfordern, alles, was ich will, ist direkt die Inhalte auszugeben, die im Excel-Blatt organisiert sind. –

0

Da ich dein Beispiel nicht ausführen kann und nur einen Teil deines Codes habe, zwei Ideen. Beide können oder nicht verursachen können Ihre Daten in einer Zelle zusammengeballt werden:

  1. Sie sind alle Elemente auf einmal zurückkehrt, anstatt sie eins nach dem Nachgeben (aufblicken Python Generatoren wenn Sie sich nicht sicher was das bedeutet). Versuchen Sie stattdessen:

    items= [] 
    for products in response.xpath('//*[@id="mainResults"]/ul'): 
        item = amazonlist() 
    
        item['Title'] = products.css('a>h2::text').extract() 
        item['Price'] = products.css(' div > div > div > a > span.a-size-base.a-color-price.s-price.a-text-bold::text').extract() 
        item['Prime'] = products.css(' div > div > div > i::attr(aria-label)').extract() 
    
        yield item 
    
  2. Die extract Methode liefert eine Liste der Ergebnisse, eine für jedes Spiel. Wenn jede products Instanz in der Schleife mehrere Produkte enthält, stimmen alle überein. Sie müssten die Abfrage weiter unten durchbrechen, um jedes einzelne Produkt zu durchlaufen. Sie können pdb oder eine print-Anweisung verwenden, um zu überprüfen, ob beispielsweise item['Title'] eine Liste von Strings enthält und nicht eine.

Hoffe, das hilft!

+0

Ich habe sogar diesen Code ausprobiert, ich bekomme immer noch die gleiche Ausgabe. –

+0

Konnten Sie den Rest des Codes und/oder die spezifische Website, die Sie scrapen möchten, posten? – primateer