1

首先,html 行如下所示:

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

我会展示真正的 html,但我很抱歉说不知道如何阻止它。感到羞耻

使用 BeautifulSoup (Python) 或任何其他推荐的屏幕抓取/解析方法,我想将同一目录中的大约 1200 个 .htm 文件输出为 CSV 格式。这最终将进入 SQL 数据库。每个目录代表一年,我计划至少做 5 年。

glob根据一些建议,我一直在玩弄这是最好的方法。这就是我到目前为止所拥有的并且被卡住了。

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

我意识到这很丑陋,但这是我第一次尝试这样的事情。在意识到我不必手动复制数千个文件并将其粘贴到 Excel 中之后,我花了几个月的时间才解决这个问题。我也意识到我可以因为沮丧而反复踢我的电脑,但它仍然有效(不推荐)。我快接近了,我需要知道接下来要做什么来制作这些 CSV 文件。请帮忙,否则我的显示器终于被锤击了。

4

3 回答 3

4

你并没有真正解释为什么你被卡住了 - 什么不工作?

以下行很可能是您的问题:

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

在我看来应该是这样的:

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

以下行:

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

看起来它只会挑选偶数行(假设你的偶数行有类'evenColor'而奇数行有'oddColor')。假设您希望所有行的类为 evenColor 或 oddColor,您可以使用正则表达式来匹配类值:

for row in soup.findAll("tr", attrs={ "class" : re.compile(r"evenColor|oddColor") })
于 2009-07-06T10:06:04.230 回答
4

您需要通过添加到文件顶部来导入csv 模块。import csv

然后你需要一些东西来在你的行循环之外创建一个 csv 文件,如下所示:

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

然后,您需要实际将数据从循环中的 html 行中提取出来,类似于

values = (td.fetchText() for td in row)
writer.writerow(values)
于 2009-07-06T11:17:50.760 回答
2

看起来不错,BeautifulSoup 对此很有用(尽管我个人倾向于使用 lxml)。您应该能够获取您获得的数据,并使用 csv 模块制作一个 csv 文件,而不会出现任何明显的问题......

我认为你需要真正告诉我们问题是什么。“它仍然不起作用”不是问题描述。

于 2009-07-06T10:02:33.317 回答