Skip to main content
 首页 » 编程设计

python之将多个html文件抓取到CSV

2025年05月04日8me-sa

我正试图从我硬盘上的 1200 多个 .htm 文件中删除行。在我的电脑上,它们位于“file:///home/phi/Data/NHL/pl07-08/PL020001.HTM”。这些 .htm 文件是从 *20001.htm 到 *21230.htm 的顺序。我的计划是最终通过电子表格应用程序将我的数据放入 MySQL 或 SQLite 中,或者如果我可以从此过程中获得干净的 .csv 文件,则直接放入。

这是我第一次尝试代码 (Python)、抓取,我刚刚在我那破烂的奔腾 IV 上安装了 Ubuntu 9.04。不用说我是新手并且有一些障碍。

如何让 Mechanize 按顺序遍历目录中的所有文件。 Mechanize 甚至可以做到这一点吗? mechanize/Python/BeautifulSoup 可以读取“file:///”样式的 url 还是有另一种方法将其指向/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 中的终端?

请您参考如下方法:

你不需要 Mechanize 。由于我不完全了解 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 

然后选择你想要的东西并用逗号将它写入标准输出(并将它重定向 > 到一个文件)。或者通过 python 编写 csv。