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

如何使用Python解析带有表的HTML文件,python,html,parsing,html-parsing,Python,Html,Parsing,Html Parsing,我有一个带有表的html文件(它是一个很大的文件,所以只给出了示例代码)。我想检索表中的值。我尝试了python中的HTMLPasser库 我开始像下面这样编码。然后我发现属性“class”与系统定义的关键字相同。所以这给了我错误 class MyHTMLParser(HTMLParser): def handle_starttag(self, tag, attrs): if tag == 'tr': for class in attrs:

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

我开始像下面这样编码。然后我发现属性“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>

车站代码车站名称计划到达计划出发实际/预计到达实际/预计出发
TVC始发站2011年5月7日05:00始发站2011年5月7日05:00
TVP纽约05:0420105:0520105:0520105:0420105:0420105:0420105:052011年05月07日
更新


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

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


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


请注意
handle\u 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。

注意
handle\u 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这样的值 代码站名称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
'''
从美化组导入美化组
html=“”\
车站代码车站名称计划到达计划出发实际/预计到达实际/预计出发
TVC始发站2011年5月7日05:00始发站2011年5月7日05:00
'''
soup=BeautifulSoup(html)
tag=soup.findAll('td',limit=2)
tag_O=soup.findAll('td')[7]
对于范围内的i(len(tag)):
打印标记[i]。字符串
打印标记字符串
''输出-->
车站代码
站名
俄勒冈州
'''
如何打印像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
'''
从美化组导入美化组
html=“”\
车站代码车站名称计划到达计划出发实际/预计到达实际/预计出发
TVC始发站2011年5月7日05:00始发站2011年5月7日05:00
'''
soup=BeautifulSoup(html)
tag=soup.findAll('td',limit=2)
tag_O=soup.findAll('td')[7]
对于范围内的i(len(tag)):
打印标记[i]。字符串
打印标记字符串
''输出-->
车站代码
站名
俄勒冈州
'''

如何打印
站点代码
站点名称
俄勒冈州
..?@user567879:您可以找到
td
标签并对其进行处理抱歉这个愚蠢的问题。我想要的是,我需要处理(找不到打印值b/w标记的方法)表标记之间的td标记。如何处理嵌套?@user567879:不知道你到底在问什么。。。尽管如此,我还是建议大家看看BeautifulSoup——它为HTML处理提供了更高级别的API。与itI相比,HTMLPasser使用起来相当笨拙。当
class=Table\u Heading
class=Table\u row
class=alternate\u Table\u row
时,我只想在
tr
标记中打印数据。我可以使用和clause使其工作吗?如何打印诸如
站点代码
站点名称
ORIGON
之类的值?@user567879:您可以找到
td
标记并对其进行处理抱歉这个愚蠢的问题。我想要的是,我需要处理(找不到打印值b/w标记的方法)表标记之间的td标记。如何处理嵌套?@user567879:不知道你到底在问什么。。。尽管如此,我还是建议大家看看BeautifulSoup——它为HTML处理提供了更高级别的API。与itI相比,HTMLPasser使用起来相当笨拙。当
class=Table\u Heading
class=Table\u row
class=alternate\u Table\u row
时,我只想在
tr
标记中打印数据。我可以使用和cluause使其工作吗?我编写了一个不需要任何外部模块的小型简单HTML表解析器:我编写了一个不需要任何外部模块的小型简单HTML表解析器: