从多个html文件中将文本提取到一个CSV文件的最佳方法

时间:2010-12-25 01:02:13

标签: python

阅读本论坛后,我不确定哪种方法最好将数据部分提取到CSV文件中。 Python / Beautiful Soup / html2text。由于文件数量很多,我想尝试编写一个可以在终端中运行的脚本。

输出:一个CSV文件,包含文本行和五列数据。例如第一行和最后一行

100 2010-12-20 145 ABC 04110000

1 2010-11-10 133 DDD 041123847

谢谢!

3 个答案:

答案 0 :(得分:3)

我建议使用BeautifulSoup。这样的事情会做(完全未经测试)。请阅读documentation了解更多信息。

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 :(得分:1)

我不知道Python本身是否支持XPath,但如果确实如此,你应该对该主题进行一些研究。

另一种替代解决方案是正则表达式。

答案 2 :(得分:0)

我已将我的代码修改为:

#!/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文件中。出于某种原因,它并没有提取所有必需的数据,但是"未命中"一些数据,例如地址1和地址2数据+表格开头的日期和时间和数字都没有出来。