【问题标题】:How to parse a HTML file with table using Python如何使用 Python 解析带有表格的 HTML 文件
【发布时间】:2011-05-07 11:04:35
【问题描述】:

我有一个带有表格的 html 文件(它很大,所以只给出了示例代码)。我想检索表中的值。我尝试了 python 中的 HTMLParser 库。

我开始像下面这样编码。然后我发现属性“类”与系统定义的关键字相同。所以它给了我错误。

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>

更新

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

【问题讨论】:

标签: python html parsing html-parsing


【解决方案1】:

请注意,handle_starttag 方法的文档说明:

tag 参数是 标签转换为小写。属性 参数是(名称,值)的列表 包含找到的属性的对 在标签的 括号内。

所以,您可能正在寻找类似的东西:

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。

【讨论】:

  • 如何打印STATION CODE STATION NAME ORIGON ...之类的值?
  • @user567879:你可以找到td标签并处理它们
  • 抱歉这个愚蠢的问题。我想要的是我需要处理(无法找到打印值 b/w 标签的方法)表标签之间的 td 标签。如何处理这种嵌套?
  • @user567879:不知道你到底在问什么……我还是推荐看看 BeautifulSoup——它为 HTML 处理提供了更高级别的 API。与它相比,HTMLParser 使用起来相当尴尬
  • 我只想在class=Table_Headingclass=Table_rowclass=alternate_table_row时打印tr标签中的数据。我可以使用和 cluause 使其工作吗?
【解决方案2】:

如何打印像 STATION 这样的值 代码站名称 ORIGON ...?.

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
'''

【讨论】:

    【解决方案3】:

    我强烈推荐使用 BeautifulSoup 库。它甚至可以轻松处理损坏的 HTML。

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

    【讨论】:

      猜你喜欢
      • 2015-02-01
      • 1970-01-01
      • 2020-11-29
      • 1970-01-01
      • 2017-10-10
      • 2017-06-23
      • 2021-04-16
      • 2015-10-14
      • 2011-01-04
      相关资源
      最近更新 更多