Python:如果属性匹配,则在html标记之间获取数据,并将其放入列表中

Python:如果属性匹配,则在html标记之间获取数据,并将其放入列表中,python,urllib2,html-parser,Python,Urllib2,Html Parser,这是html文件的一部分 ...... ...... <tr> <td color="white" style="color:black; bgcolor="#ffff00">Adam</th> <td color="white" style="color:white; bgcolor="#ff9900">450231</th> <td color="white" style="color:black; bgcolor="#cc0

这是html文件的一部分

......
......
<tr>
<td color="white" style="color:black; bgcolor="#ffff00">Adam</th>
<td color="white" style="color:white; bgcolor="#ff9900">450231</th>
<td color="white" style="color:black; bgcolor="#cc0000">658902</th>
</tr>
.......
.......
<tr>
<td color="white" style="color:black; bgcolor="#ffff00">John</th>
<td color="white" style="color:white; bgcolor="#ff9900">8734658</th>
<td color="white" style="color:black; bgcolor="#cc0000">90865</th>
</tr>
.......
.......

parser.data包含
['\n',Adam','\n','450231','\n','658902\n','\n','\n'..]
而它应该只包含
['450231','8734658']
我不确定哪里出了问题。

您的录制标志似乎一直处于打开状态,除非在初始化时。您可能需要在适当的时候将其重置为零。由于该标志是为所有标记设置的,因此您将始终在列表中追加数据。这主要是因为HTML中没有“th”标记。首先更正HTML

编辑:只需阅读HTML不在您的控制范围内。我不确定签入'th'结束标记是否会成功。尝试在endtag中打印标记。如果它不是一个th,那么控制将永远不会到达那里。使用正则表达式来匹配它怎么样。如果beautiful soup无法解析它,您可能需要求助于正则表达式


pattern = '<td.*?bgcolor="#ff9900".*?>(.*?)</th>'
re.findall(pattern, html) 

模式=“(.*)”
关于findall(模式,html)

应该会给你结果。

使用BeautifulSoup库,这项任务会容易得多;这是一个外部依赖项,但它使您的任务简单了100倍;CSS
style
标记中不会有引号;您的意思是将
bgcolor
样式文本改为单独的属性。您的结束标记与开始标记不匹配;这真的是原始源代码的样子吗?而且HTML的格式似乎不是很好!这就是问题所在。。该站点中的标记不匹配。。如果它们匹配,我想我可以使用BeautifulSoup。实际上,根据使用的解析器,BeautifulSoup可以比大多数更好地处理损坏的HTML。
html5lib
解析器很可能会对此做出最好的解释。非常感谢!这几乎是对的!你能在你的正则表达式中找到一个错误吗?正则表达式在我的系统中工作!但是最好使用类似于
“(.*?”

pattern = '<td.*?bgcolor="#ff9900".*?>(.*?)</th>'
re.findall(pattern, html)