首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将多个html文件中的文本提取到一个CSV文件中的最佳方法

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

Stack Overflow用户
提问于 2010-12-25 09:02:13
回答 3查看 2.2K关注 0票数 1

读完这个论坛后,我不确定哪种方法最好将部分数据提取到CSV文件中,即Python/Beautiful Soup/html2text。因为有大量的文件,所以我想尝试编写一个可以在终端中运行的脚本。

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

1002010-12-20 145 ABC 04110000

1 2010-11-10 133 DDD 041123847

谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-12-25 09:08:26

我推荐使用BeautifulSoup。像这样的东西就行了(完全未经测试)。有关更多信息,请阅读documentation

代码语言:javascript
复制
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'))
票数 4
EN

Stack Overflow用户

发布于 2010-12-25 09:08:10

我不知道Python本身是否支持XPath,但如果它支持,您应该在这个主题上做一些研究。

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

票数 1
EN

Stack Overflow用户

发布于 2010-12-31 04:42:21

我已经将我的代码修改为:

代码语言:javascript
复制
#!/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和Address2数据+表开头的日期和时间以及数字没有出来。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4528915

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档