如何使用Python解析带有表的HTML文件
我有一个带有表的html文件(它是一个很大的文件,所以只给出了示例代码)。我想检索表中的值。我尝试了python中的HTMLPasser库 我开始像下面这样编码。然后我发现属性“class”与系统定义的关键字相同。所以这给了我错误如何使用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:
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表解析器: