Question

Tout d'abord la ligne html ressemble à ceci:

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

Je montre le vrai html mais je suis désolé de le dire ne sais pas comment le bloquer. éprouve de la honte

Utilisation BeautifulSoup (Python) ou toute autre méthode de Grattage / Parsing écran recommandé Je voudrais sortie sur les 1200 fichiers .htm dans le même répertoire dans un format CSV. Ce qui finira par entrer dans une base de données SQL. Chaque répertoire représente un an et je prévois de faire au moins 5 ans.

Je suis avec glob autour de gaffes comme la meilleure façon de le faire de quelques conseils. Voilà ce que j'ai jusqu'à présent et je suis coincé.

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

Je sais que c'est laid, mais il est ma première fois d'essayer quelque chose comme ça. Celui-ci problème m'a fallu des mois pour arriver à ce point après avoir réalisé que je ne dois pas aller manuellement à travers des milliers de fichiers copier et coller dans Excel. Je suis aussi rendu compte que je peux lancer mon ordinateur à plusieurs reprises de la frustration et il fonctionne encore (non recommandé). Je reçois près et je dois savoir quoi faire pour rendre ces fichiers CSV. S'il vous plaît aider ou mon moniteur est enfin marteau perforé.

Était-ce utile?

La solution

Vous devez importer le le module csv en ajoutant import csv au sommet de votre fichier.

Ensuite, vous aurez besoin de quelque chose pour créer un fichier csv en dehors de votre boucle des lignes, comme suit:

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

Ensuite, vous devez tirer réellement les données sur la ligne html dans votre boucle, similaire à

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

Autres conseils

Vous n'expliquez pas vraiment pourquoi vous êtes coincé - ce qui ne fonctionne pas exactement

?

La ligne suivante pourrait bien être votre problème:

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

Il me semble que ce devrait être:

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

La ligne suivante:

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

ressemble il ne choisir même des lignes (en supposant que vos lignes paires ont la classe « evenColor » et les lignes impaires « oddColor »). En supposant que vous voulez toutes les lignes avec une classe de l'une ou evenColor oddColor, vous pouvez utiliser une expression régulière pour correspondre à la valeur de la classe:

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

Cela semble bien, et BeautifulSoup est utile pour cela (même si je tends personnellement à utiliser lxml). Vous devriez être en mesure de prendre les données que vous obtenez, et faire un fichier csv sur le module utilise csv sans aucun problème évident ...

Je pense que vous avez besoin de nous dire en fait ce que le problème est. « Il ne fonctionne toujours pas » est pas un Descripton problème.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top