Pregunta

Estoy tratando de raspar filas fuera de más de 1200 archivos .htm que están en mi disco duro. En mi equipo están aquí 'file: ///home/phi/Data/NHL/pl07-08/PL020001.HTM'. Estos archivos .htm son secuenciales de * * 20001.htm hasta 21230.htm. Mi plan es lanzar finalmente mis datos en MySQL o SQLite a través de una aplicación de hoja de cálculo o sólo directamente en si puedo conseguir un archivo .csv limpia de este proceso.

Este es mi primer intento de código (Python), raspado, y me acaba de instalar Ubuntu 9.04 en mi Pentium IV chungo. No hace falta decir que soy Novato y tienen algunos obstáculos.

¿Cómo me mecanizar que pasar por todos los archivos en el directorio en orden. Puede mecanizar incluso hacer esto? Puede mecanizar / Python / BeautifulSoup leer un 'file: ///' url estilo o hay otra manera de apuntar a /home/phi/Data/NHL/pl07-08/PL020001.HTM? ¿Es más inteligente que hacer esto en 100 o 250 incrementos de archivos o simplemente enviar todo 1230?

Sólo necesito filas que comienzan con esta "<tr class="evenColor">" y terminan con esta "</tr>". Lo ideal sería que sólo quiero las filas que contienen "SHOT" | "miss" | "META" dentro de ellos, pero quiero que toda la fila (cada columna). Tenga en cuenta que " Objetivo " está en negrita por lo que tengo que especificar esto? Hay 3 mesas por archivo htm.

También me gustaría que el nombre del archivo principal (pl020001.htm) que se incluirán en las filas raspo por lo que pueden ellos Identificación en su propia columna en la base de datos final . Ni siquiera sé por dónde empezar para eso. Esto es lo que tengo hasta ahora:

#/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?

¿Debo utilizar de inicio, o algo por el estilo? solo terminal en Ubuntu 9.04?

¿Fue útil?

Solución

No será necesario mecanizar. Dado que no sé exactamente el contenido HTML, que iba a tratar de ver lo que coincide, en primer lugar. De esta manera:

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

A continuación, elija el material que desee y escribir en la salida estándar por comas (y redirigirlo> a un archivo). O escriba a la CSV a través de pitón.

Otros consejos

La respuesta de MYYN se parece a un gran comienzo para mí. Una cosa que me gustaría señalar que yo he tenido suerte con es:

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

He encontrado tanto en las importaciones y os glob a ser muy útil para ejecutar a través de archivos en un directorio.

Además, una vez que estés utilizando un bucle de esta manera, usted tiene la file_name que se puede modificar para su uso en el archivo de salida, por lo que los nombres de archivo de salida coincidirá con los archivos de entrada.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top