如何用Python解析带表格的HTML文件

1 投票
3 回答
14321 浏览
提问于 2025-04-16 17:11

我有一个包含表格的HTML文件(这个表格很大,所以这里只给了示例代码)。我想从表格中提取值。我尝试使用Python的HTMLParser库。

我开始写代码,结果发现“class”这个属性和系统定义的关键字是一样的,所以出现了错误。

class MyHTMLParser(HTMLParser):

    def handle_starttag(self, tag, attrs):
        if tag == 'tr':
            for class in attrs:
                if class == 'Table_row'

p = MyHTMLParser()
p.feed(ht)   

表格的HTML代码

<table class="Table_rows" cellspacing="0" rules="all" border="1" id="MyDataGrid" style="width:700px;border-collapse:collapse;">

                    <tr class="Table_Heading">

                        <td>STATION CODE</td><td>STATION NAME</td><td>SCHEDULED ARRIVAL</td><td>SCHEDULED DEPARTURE</td><td>ACTUAL/ EXPECTED ARRIVAL</td><td>ACTUAL/ EXPECTED DEPARTURE</td>

                    </tr><tr class="Table_row">

                        <td>TVC </td><td style="width:160px;">ORIGON</td><td>Starting Station </td><td>05:00, 07 May 2011</td><td>Starting Station</td><td>05:00, 07 May 2011</td>

                    </tr><tr class="alternat_table_row">

                        <td>TVP </td><td>NEY YORK</td><td>05:04, 07 May 2011</td><td>05:05, 07 May 2011</td><td>05:04, 07 May 2011</td><td>05:05, 07 May 2011</td>

</tr>               
</table>

更新

我该如何获取标签之间的数据呢?

3 个回答

1

我非常推荐使用BeautifulSoup这个库。它可以轻松处理那些有问题的HTML代码。

http://www.crummy.com/software/BeautifulSoup/

2

如何打印出像“车站代码”、“车站名称”、“起点”等这样的值呢?

你可以使用BeautifulSoup这样来实现。

from BeautifulSoup import BeautifulSoup

html = '''\
<td>STATION CODE</td><td>STATION NAME</td><td>SCHEDULED ARRIVAL</td><td>SCHEDULED DEPARTURE</td><td>ACTUAL/ EXPECTED ARRIVAL</td><td>ACTUAL/ EXPECTED DEPARTURE</td>
</tr><tr class="Table_row">
<td>TVC </td><td style="width:160px;">ORIGON</td><td>Starting Station </td><td>05:00, 07 May 2011</td><td>Starting Station</td><td>05:00, 07 May 2011</td>
'''

soup = BeautifulSoup(html)
tag = soup.findAll('td', limit=2)
tag_O = soup.findAll('td')[7]

for i in range(len(tag)):
    print tag[i].string
print tag_O.string

'''Output-->
STATION CODE
STATION NAME
ORIGON
'''
4

注意,handle_starttag 方法的文档中提到:

标签参数是标签名称的小写形式。attrs 参数是一个包含标签内 <> 括号中找到的属性的 (名称, 值) 对的列表。

所以,你可能在寻找类似这样的东西:

from HTMLParser import HTMLParser

class MyHTMLParser(HTMLParser):
    def handle_starttag(self, tag, attrs):
        if tag == 'tr':
            for name, value in attrs:
                if name == 'class':
                    print 'Found class', value

p = MyHTMLParser()
p.feed(ht)   

输出结果是:

Found class Table_Heading
Found class Table_row
Found class alternat_table_row

附言:我还推荐使用 BeautifulSoup 来用 Python 解析 HTML。

撰写回答