Зачистка нескольких файлов HTML в CSV - PullRequest
2 голосов
/ 29 мая 2009

Я пытаюсь вычистить строки из более чем 1200 файлов .htm, которые находятся на моем жестком диске. На моем компьютере они находятся здесь: file: ///home/phi/Data/NHL/pl07-08/PL020001.HTM. Эти файлы .htm последовательны от * 20001.htm до * 21230.htm. Мой план состоит в том, чтобы в конечном итоге выбросить мои данные в MySQL или SQLite через приложение для работы с электронными таблицами или просто напрямую, если я смогу получить чистый CSV-файл из этого процесса.

Это моя первая попытка скопировать код (Python), и я только что установил Ubuntu 9.04 на свой дерьмовый Pentium IV. Излишне говорить, что я новичок и имею некоторые контрольно-пропускные пункты.

Как мне заставить механизм пройтись по всем файлам в каталоге по порядку. Может ли механизировать даже сделать это? Может ли Mechanize / Python / BeautifulSoup прочитать URL-адрес в стиле file: /// или есть другой способ указать его на /home/phi/Data/NHL/pl07-08/PL020001.HTM? Разумно ли делать это с шагом 100 или 250 файлов или просто отправлять все 1230?

Мне просто нужны строки, которые начинаются с этого "<tr class="evenColor">" и заканчиваются этим "</tr>". В идеале мне нужны только те строки, которые содержат «SHOT» | «MISS» | «GOAL», но мне нужна вся строка (каждый столбец). Обратите внимание, что " GOAL " выделено жирным шрифтом, поэтому нужно ли это указывать? В файле htm 3 таблицы.

Также хотелось бы, чтобы имя родительского файла (pl020001.htm) было включено в строки, которые я очищаю, чтобы я мог идентифицировать их в своем собственном столбце в конечной базе данных . Я даже не знаю, с чего начать. Это то, что я до сих пор:

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

Должен ли я использовать IDLE или что-то подобное? просто терминал в Ubuntu 9.04?

Ответы [ 2 ]

1 голос
/ 29 мая 2009

Вам не нужно будет механизироваться. Поскольку я не знаю точно, что такое HTML, я сначала попробую посмотреть, что соответствует. Как это:

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

Затем выберите нужный материал и запишите его в стандартный вывод с запятыми (и перенаправьте> в файл). Или напишите CSV через Python.

0 голосов
/ 29 мая 2009

MYYN ответ выглядит как хорошее начало для меня. Я хотел бы отметить, что мне повезло:

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

Я обнаружил, что оба импорта os и glob очень полезны для работы с файлами в каталоге.

Кроме того, как только вы используете цикл for таким способом, у вас есть file_name, который вы можете изменить для использования в выходном файле, чтобы выходные имена файлов соответствовали входным именам файлов.

...