2016-12-22 2 views
1

Ich ging über das Tutorial für Scrapy, und ich war in der Lage zu verstehen, wie Sie die Website im Tutorial enthalten. Aber ich habe ein paar Probleme mit einigen der komplizierteren Seiten (zumindest für mich).Probleme beim scraping einer bestimmten Website mit scrapy

Ich bin versucht, die Zeilen und Spalten der Insider-Transaktionen von dieser Webseite zu kratzen:

http://finviz.com/insidertrading.ashx

ich Eingabeaufforderung bin mit Befehlen mit scrapy aus zu testen, ob ich in der Lage bin zu kratzen die notwendigen Informationen, so sind die folgenden Befehle, die ich in der Eingabeaufforderung geschrieben habe.

Ich habe dann Firebug von Firefox verwendet, um den HTML-Code der Seite zu betrachten

Ich bin in der Lage, einige der Informationen (Bild-Name, Name des Insider und Datum) in eine Liste über diesen Code zu erhalten:

response.css('td a.tab-link::text').extract() 

Allerdings ist der Rest der Informationen fehlt.

Ich bin in der Lage einige (vielleicht die meisten) der fehlenden Informationen (Kosten, Aktien, Wert usw.) über diesen Code

response.css(td::text).extract() 

ich herausfinden kann, nicht zu bekommen, wie sauber alle Informationen zusammen zu bekommen in einem Kratzen.

Danke.

EDIT: Die andere Möglichkeit wäre, die Daten iterativ zu sammeln, eine Zeile zu einer Zeit, so dass ich es trennen kann, wie ich es mag. Ich grüble darüber auch.

Antwort

2

Da die Daten tabellarisch sind, ist die Position von Tabellenzeilen und -spalten vorhersehbar und stabil. Sie können einfach den gesamten Text in der Zeile extrahieren und in Variablen entpacken:

for row in response.xpath("//tr[@class='insider-option-row']"): 
    items = row.xpath('td/a/text() | td/text()').extract() 
    ticker, owner, relationship, date, transaction, cost, shares, value, shares_total, sec_form_4 = items