2017-05-22 4 views
0

Ich möchte alle Namen von einer Website https://www.internationaltelecomsweek.com mit Scrapy kratzen.Keine Daten nach dem Abschaben einer Website

Dies ist in der Artikeldatei.

import scrapy 
class ItwItem(scrapy.Item): 
    name = scrapy.Field() 

Das ist meine Spinne.

import scrapy 
from itw.items import ItwItem 
class ItwSpider(scrapy.Spider): 

     name = 'itw' 

     allowed_domains = ['https://www.internationaltelecomsweek.com'] 

     start_urls = ['https://www.internationaltelecomsweek.com/this-year/companies-attending'] 

     def parse(self, response): 
     data= json.loads(response.body) 
     for i in data: 
     item["name"] = i["DisplayName"] 
     return item 

Wenn ich scrapy laufen lasse ich nur eine leere CSV-Datei. Was mache ich falsch?

Antwort

1

Es scheint, dass die Liste der Teilnehmer dynamisch generiert wird und jeder Teilnehmer als JSON-Objekt zurückgegeben wird.

Laden Sie die Website in der scrapy shell und überprüfen Sie view(response), um zu sehen, was Ihre Spinne tatsächlich lesen kann. Sie werden sehen, dass die Seite nichts zurückgibt, wo Sie in Ihrem Browser die Teilnehmer sehen können.

Wenn Sie auf der Netzwerkregisterkarte überprüfen, welche Anforderungen an den Server weitergeleitet werden, sehen Sie, dass die Teilnehmerliste von this URL jeweils als JSON-Objekt übergeben wird.

Was Sie tun müssen, ist: Analysieren Sie die URL, die die JSON-Objekte liefert und verarbeiten sie JSON mit in scrapy:

import json 

data = json.loads(response.body) 
for i in data: 
    item["name"] = i["DisplayName"] 
+0

Welche Fehler haben Sie bekommen? – rongon

+0

IndentationError: Eingeklickt entspricht keiner äußeren Einrückungsebene – Hasan

+0

Bedeutet, dass Ihr Einzug nicht korrekt ist. Der Beispielcode, den ich gepostet habe, sollte unter der Parse-Funktion sein, was bedeutet, dass Sie ihn um 8 Leerzeichen einrücken sollten. – rongon

Verwandte Themen