2017-06-14 1 views
0

Ich habe ein Skript geschrieben, um Daten aus der ersten Tabelle einer Website zu analysieren. Ich habe Xpath verwendet, um die Tabelle zu analysieren. Übrigens, ich habe kein "tr" -Tag verwendet, weil ich es ohne Verwendung der Konsole immer noch im Ausdruck sehen kann. Wenn ich mein Skript ausführe, werden die Daten abgekratzt, aber in einer einzigen Zeile in einer CSV-Datei gedruckt. Ich kann den Fehler, den ich mache, nicht herausfinden. Irgendwelche Eingaben dazu werden sehr geschätzt. Hier ist, was ich versucht habe:Daten aus einer Tabelle, die in einer einzigen Zeile nach csv gedruckt werden

import csv 
import requests 
from lxml import html 

url="https://fantasy.premierleague.com/player-list/" 
response = requests.get(url).text 
outfile=open('Data_tab.csv','w', newline='') 
writer=csv.writer(outfile) 
writer.writerow(["Player","Team","Points","Cost"]) 
tree = html.fromstring(response) 
for titles in tree.xpath("//table[@class='ism-table']")[0]: 
    # tab_r = titles.xpath('.//tr/text()') 
    tab_d = titles.xpath('.//td/text()') 
    writer.writerow(tab_d) 

Antwort

1

Sie möchten möglicherweise eine Ebene der Schleife hinzufügen, jede Zeile Reihe der Reihe nach untersucht.

Versuchen Sie folgendes:

for titles in tree.xpath("//table[@class='ism-table']")[0]: 
    for row in titles.xpath('./tr'): 
     tab_d = row.xpath('./td/text()') 
     writer.writerow(tab_d) 

Oder vielleicht dieses:

table = tree.xpath("//table[@class='ism-table']")[0] 
for row in table.xpath('.//tr'): 
    items = row.xpath('./td/text()') 
    writer.writerow(items) 

Oder Sie könnten der erste XPath-Ausdruck die Zeilen für Sie haben:

rows = tree.xpath("(.//table[@class='ism-table'])[1]//tr") 
for row in rows: 
    items = row.xpath('./td/text()') 
    writer.writerow(items) 
+0

Dank Sir Robᵩ, für Ihre robuste Lösung. Beide Codes rocken einfach. – SIM

Verwandte Themen