Frage

Als erstes die HTML-Zeile sieht wie folgt aus:

<tr class="evenColor"> blahblah TheTextIneed blahblah and ends with </tr>

würde ich die realen html zeigen, aber ich bedaure, wissen zu sagen, nicht, wie es zu blockieren. fühlt Scham

Mit BeautifulSoup (Python) oder ander empfohlene Screen Scraping / Parsing-Methode würde Ich mag die Ausgabe etwa 1200 HTM-Dateien im selben Verzeichnis in ein CSV-Format. Dies geht schließlich in eine SQL-Datenbank. Jedes Verzeichnis stellt ein Jahr und ich plane, mindestens 5 Jahre zu tun.

Ich habe mit glob als die beste Art und Weise vermasseln um diese von ein paar Ratschläge zu tun. Das ist, was ich habe, so weit und bin stecken.

import glob
from BeautifulSoup import BeautifulSoup

for filename in glob.glob('/home/phi/data/NHL/pl0708/pl02*.htm'):
#these files go from pl020001.htm to pl021230.htm sequentially
    soup = BeautifulSoup(open(filename["r"]))
    for row in soup.findAll("tr", attrs={ "class" : "evenColor" })

Ich weiß, das ist hässlich, aber es ist mein erstes Mal etwas ähnliches versucht. Dieses Problem hat Monate gedauert, mich zu diesem Punkt zu kommen, nachdem sie erkannt, dass ich zu Tausenden nicht manuell durchläuft von Dateien zu kopieren und Einfügen in Excel. Ich habe auch gemerkt, dass ich meinen Computer immer wieder aus Frustration treten kann und es funktioniert immer noch (nicht empfohlen). Ich bin immer in der Nähe und ich muß wissen, was als nächstes zu tun, um diese CSV-Dateien zu machen. Bitte helfen oder mein Monitor schließlich wird Hammer gestanzt.

War es hilfreich?

Lösung

Sie müssen die csv-Modul importieren, indem import csv an die Spitze der Zugabe Ihrer Datei.

Dann müssen Sie etwas eine CSV-Datei außerhalb der Schleife der Zeilen zu erstellen, etwa so:

writer = csv.writer(open("%s.csv" % filename, "wb"))

Dann müssen Sie die Daten tatsächlich aus der HTML-Zeile in der Schleife, ähnlich wie

ziehen
values = (td.fetchText() for td in row)
writer.writerow(values)

Andere Tipps

Sie erklären nicht wirklich, warum Sie stecken geblieben sind - was genau nicht funktioniert

?

Die folgende Zeile kann gut sein, Ihr Problem:

soup = BeautifulSoup(open(filename["r"]))

Es sieht aus wie ich dies soll sein:

soup = BeautifulSoup(open(filename, "r"))

Die folgende Zeile:

for row in soup.findAll("tr", attrs={ "class" : "evenColor" })

sieht aus wie es nur gerade Zeilen herausgreifen werden (vorausgesetzt, Ihre geraden Zeilen haben die Klasse ‚evenColor‘ und ungerade Zeilen ‚oddColor‘). Vorausgesetzt, dass Sie alle Zeilen mit einer Klasse von entweder evenColor oder oddColor möchten, können Sie einen regulären Ausdruck verwenden, um die Klasse Wert übereinstimmen:

for row in soup.findAll("tr", attrs={ "class" : re.compile(r"evenColor|oddColor") })

Das sieht gut aus, und BeautifulSoup ist dafür nützlich (obwohl ich persönlich verwenden lxml neigen). Sie sollten diese Daten, die Sie treffen können, zu erhalten, und eine CSV-Datei macht aus wird das csv-Modul ohne offensichtliche Probleme mit ...

Ich glaube, Sie müssen uns eigentlich sagen, was das Problem ist. „Es ist immer noch nicht funktioniert“ ist kein Problem descripton.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top