2024-05-16 12:32:13 发布
网友
我想从html页面提取标签之间的数据。我使用了下面的代码,但是没有得到任何结果。标签之间的html是多行的
category =re.findall('<tr>(.*?)</tr>',data);
请建议解决这个问题。
不要使用regex,使用HTML解析器,例如BeautifulSoup:
html = '<html><body>foo<tr>bar</tr>baz<tr>qux</tr></body></html>' import BeautifulSoup soup = BeautifulSoup.BeautifulSoup(html) print soup.findAll("tr")
结果:
[<tr>bar</tr>, <tr>qux</tr>]
如果只需要内容,而不需要tr标记:
for tr in soup.findAll("tr"): print tr.contents
bar qux
使用HTML解析器并不像听起来那么可怕!它将比任何将在这里发布的regex更可靠。
不要使用正则表达式来分析HTML。使用HTML解析器,如lxml或BeautifulSoup。
只是为了澄清这个问题。尽管所有这些链接都指向re.M,但在这里它不会工作,因为简单地浏览一下它的解释就会发现。如果不尝试解析html,当然需要re.S:
re.M
re.S
>>> doc = """<table border="1"> <tr> <td>row 1, cell 1</td> <td>row 1, cell 2</td> </tr> <tr> <td>row 2, cell 1</td> <td>row 2, cell 2</td> </tr> </table>""" >>> re.findall('<tr>(.*?)</tr>', doc, re.S) ['\n <td>row 1, cell 1</td>\n <td>row 1, cell 2</td>\n ', '\n <td>row 2, cell 1</td>\n <td>row 2, cell 2</td>\n '] >>> re.findall('<tr>(.*?)</tr>', doc, re.M) []
不要使用regex,使用HTML解析器,例如BeautifulSoup:
结果:
如果只需要内容,而不需要tr标记:
结果:
使用HTML解析器并不像听起来那么可怕!它将比任何将在这里发布的regex更可靠。
不要使用正则表达式来分析HTML。使用HTML解析器,如lxml或BeautifulSoup。
只是为了澄清这个问题。尽管所有这些链接都指向
re.M
,但在这里它不会工作,因为简单地浏览一下它的解释就会发现。如果不尝试解析html,当然需要re.S
:相关问题 更多 >
编程相关推荐