Frage

Ich versuche, Reihen abkratzen von über 1200 HTM-Dateien, die auf meiner Festplatte sind. Auf meinem Computer sind sie hier ‚file: ///home/phi/Data/NHL/pl07-08/PL020001.HTM‘. Diese HTM-Dateien sind sequenzielle von * 20001.htm bis * 21230.htm. Mein Plan ist es meine Daten in MySQL oder SQLite, um schließlich über eine Tabelle App zu werfen oder einfach nur gerade, wenn ich eine saubere CSV-Datei aus diesem Prozess erhalten kann.

Dies ist mein erster Versuch Code (Python), Schaben und ich nur Ubuntu 9.04 auf meinem beschissenen Pentium IV installiert. Unnötig zu sagen, ich bin newb und einige Straßensperren haben.

Wie kann ich mechanisieren durch alle Dateien in dem Verzeichnis, um zu gehen. Kann mechanisieren dies auch tun? Kann mechanisieren / lesen Python / BeautifulSoup eine ‚file: ///‘ Stil URL oder gibt es eine andere Möglichkeit, es zu deuten auf /home/phi/Data/NHL/pl07-08/PL020001.HTM? Ist es klug, diese in 100 oder 250 Datei-Schritten zu tun, oder nur alle 1230 schicken?

Ich brauche nur Zeilen, die mit diesem „<tr class="evenColor">“ und enden mit diesem „</tr>“ beginnen. Im Idealfall möchte ich nur die Zeilen, die „SHOT“ enthalten | „MISS“ | „GOAL“ in ihnen, aber ich will die ganze Zeile (jede Spalte). Beachten Sie, dass „ Ziel “ in fett ist, so muss ich diese angeben müssen? Es gibt 3 Tabellen pro htm-Datei.

Auch würde ich den Namen der übergeordneten Datei wie (pl020001.htm) , um in den Reihen I aufgenommen werden kann kratzen, so kann ich id sie in ihrer eigenen Spalte in der endgültigen Datenbank . Ich weiß nicht einmal, wo dafür zu beginnen. Das ist, was ich habe, so weit:

#/usr/bin/python
from BeautifulSoup import BeautifulSoup
import re
from mechanize import Browser

mech = Browser()
url = "file:///home/phi/Data/NHL/pl07-08/PL020001.HTM"
##but how do I do multiple urls/files? PL02*.HTM?
page = mech.open(url)

html = page.read()
soup = BeautifulSoup(html)
##this confuses me and seems redundant
pl = open("input_file.html","r")
chances = open("chancesforsql.csv,"w")

table = soup.find("table", border=0)
for row in table.findAll 'tr class="evenColor"'
#should I do this instead of before?
outfile = open("shooting.csv", "w")

##how do I end it?

Soll ich mit IDLE oder etwas ähnliches sein? nur-Terminal in Ubuntu 9.04?

War es hilfreich?

Lösung

Sie brauchen nicht mechanisieren. Da ich den HTML-Inhalt nicht genau wissen, würde ich versuchen, zu sehen, was passt, zuerst. Wie folgt aus:

import glob
from BeautifulSoup import BeautifulSoup

for filename in glob.glob('/home/phi/Data/*.htm'):
    soup = BeautifulSoup(open(filename, "r").read()) # assuming some HTML
    for a_tr in soup.findAll("tr", attrs={ "class" : "evenColor" }):
        print a_tr

Dann wählen Sie das Zeug Sie wollen, und schreiben Sie es mit Komma nach stdout (und leiten es> in eine Datei). Oder schreiben Sie die csv über Python.

Andere Tipps

MYYN Antwort sieht aus wie ein guter Start für mich. Eine Sache, die ich darauf hinweisen würde, dass ich Glück hatte mit ist:

import glob
    for file_name in glob.glob('/home/phi/Data/*.htm'):
        #read the file and then parse with BeautifulSoup

Ich habe festgestellt, sowohl die os und glob Importe für die Ausführung durch die Dateien in einem Verzeichnis wirklich nützlich sein.

Auch, wenn Sie eine for-Schleife auf diese Weise verwenden, haben Sie die file_name, die Sie für die Verwendung in der Ausgabedatei ändern können, so dass die Ausgabedateinamen wird die Eingabedateinamen entsprechen.

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