【问题标题】:Scraping Multiple html files to CSV将多个 html 文件抓取到 CSV
【发布时间】:2010-10-29 17:28:50
【问题描述】:

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

这是我第一次尝试编写代码(Python)、抓取,我刚刚在我蹩脚的 pentium IV 上安装了 Ubuntu 9.04。不用说我是新手并且有一些障碍。

如何让 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 中的终端?

【问题讨论】:

    标签: python sqlite screen-scraping beautifulsoup mechanize


    【解决方案1】:

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

    【讨论】:

    • 这是该行的 HTML 内容: 56 1 PP 目标 再次,如果可能的话,我希望整行并包括文件名 (pl020001.htm) 作为刮行中的一列。
    • 'write the csv via python' 我不知道该怎么做,但想知道。我需要“导入 csv”吗?
    • @northnodewolf:发布一个新问题,其中包含有关 HTML 结构和您希望从 HTML 表创建的 CSV 的新事实。
    【解决方案2】:

    MYYN 的回答对我来说是一个很好的开始。我要指出我很幸运的一件事是:

    import glob
        for file_name in glob.glob('/home/phi/Data/*.htm'):
            #read the file and then parse with BeautifulSoup
    

    我发现 osglob 导入对于运行目录中的文件非常有用。

    此外,一旦您以这种方式使用 for 循环,您就可以修改 file_name 以在输出文件中使用,以便输出文件名与输入文件名匹配。

    【讨论】:

      猜你喜欢
      • 2016-05-24
      • 1970-01-01
      • 1970-01-01
      • 2021-06-02
      • 2020-08-22
      • 2021-11-23
      • 2018-06-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多