Pregunta

En primer lugar la fila html se ve así:

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

Me muestro el html real, pero siento tener que decir que no saben cómo bloquearla. siente vergüenza

El uso de BeautifulSoup (Python) o cualquier otro método de pantalla recomendada raspado / Parsing quisiera salida de aproximadamente 1200 archivos .htm en el mismo directorio en un formato CSV. Esto a la larga va a entrar en una base de datos SQL. Cada directorio representa un año y tengo la intención de hacer al menos 5 años.

He estado haciendo el tonto con glob como la mejor manera de hacer esto desde un consejo. Esto es lo que tengo hasta ahora y estoy atascado.

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" })

Me di cuenta que es fea pero es mi primera vez de intentar algo como esto. Este problema me ha llevado meses para llegar a este punto después de darse cuenta de que no tengo que ir manualmente a través de miles de archivos de copiar y pegar en Excel. También me he dado cuenta de que puedo poner en mi equipo en varias ocasiones debido a la frustración y todavía funciona (no se recomienda). Me estoy cerca y necesito saber qué hacer a continuación para hacer esos archivos CSV. Por favor, ayuda o mi monitor es golpeado por último martillo.

¿Fue útil?

Solución

Es necesario importar el csv módulo añadiendo import csv a la parte superior de su archivo.

A continuación, usted necesitará algo para crear un archivo csv fuera de su bucle de las filas, así:

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

Luego hay que tirar realmente los datos de la fila html en su bucle, similar a

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

Otros consejos

En realidad, no explicar por qué usted está atascado - lo que no funciona exactamente

?

La siguiente línea bien puede ser su problema:

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

A mi me parece como esta debe ser:

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

La siguiente línea:

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

Parece que sólo se transmiten a cabo las filas pares (asumiendo sus filas incluso tener la 'evenColor' clase y filas impares tener 'oddColor'). Suponiendo que desea todas las filas con una clase de cualquiera evenColor o oddColor, puede utilizar una expresión regular para que coincida con el valor de la clase:

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

Esto se ve muy bien, y BeautifulSoup es útil para esto (aunque personalmente tiendo a usar lxml). Usted debe ser capaz de tomar los datos que te dan, y hacer un archivo csv de que se utiliza el módulo csv sin ningún problema obvio ...

Creo que es necesario que nos diga lo que realmente es el problema. "Todavía no funciona" no es un problema Descripton.

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