Лучший метод извлечения текста из нескольких файлов HTML в один файл CSV - PullRequest
1 голос
/ 25 декабря 2010

После прочтения этого форума я не уверен, какой метод лучше всего извлечь части данных в файл CSV I. Python / Красивый суп / html2text. Из-за большого количества файлов я хочу попробовать написать скрипт, который можно запустить в Терминале.

Вывод: один файл CSV со строками текста и пятью столбцами данных. например первая и последняя строка

100 2010-12-20 145 ABC 04110000

1 2010-11-10 133 DDD 041123847

Спасибо!

Ответы [ 3 ]

3 голосов
/ 25 декабря 2010

Я бы порекомендовал использовать BeautifulSoup. Что-то вроде этого подойдет (полностью не проверено). Прочитайте документацию , чтобы узнать больше.

csvfile = open('dump.csv', 'w')
for file in glob.glob('*.html'):
    print 'Processing', file
    soup = BeautifulSoup(open(file).read())
    for tr in soup.findAll('tr'):
        print >>csvfile, ' '.join(tr.findAll('td'))
1 голос
/ 25 декабря 2010

Я не знаю, поддерживает ли Python изначально XPath, но если это так, вам следует провести некоторое исследование по этому вопросу.

Другим альтернативным решением могут быть регулярные выражения.

0 голосов
/ 30 декабря 2010

Я изменил свой код на:

#!/usr/bin/env python
import glob
import codecs
from BeautifulSoup import BeautifulSoup
with codecs.open('dump2.csv', "w", encoding="utf-8") as csvfile:
        for file in glob.glob('*html*'):
            print 'Processing', file
            soup = BeautifulSoup(open(file).read())
            rows = soup.findAll('tr')
            for tr in rows:
                    cols = tr.findAll('td')
                    #print >> csvfile,"#".join(col.string for col in cols)
                    #print >> csvfile,"#".join(td.find(text=True))
                    for col in cols:
                            print >> csvfile, col.string
                    print >> csvfile, "==="
            print >> csvfile, "***"

Код теперь извлекает данные с разделителями * и ===. Затем я использую perl для помещения в чистый CSV-файл. По какой-то причине он не извлекает все необходимые данные, но «пропускает» некоторые данные, например, данные Address1 и Address 2 + Дата и Время и Номер в начале таблицы не отображаются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...