Python 在两个标签之间解析 HTML
今天我在研究一个小文件上传器,结果从API页面得到了以下的回复。
upload_success<br>http://www.filepup.net/files/R6wVq1405781467.html<br>http://www.filepup.net/delete/Jp3q5w1405781467/R6wVq1405781467.html
我需要获取两个 <br>
标签之间的内容。我正在使用Beautifulsoup这个库,但我的代码返回的是None。
fpbs = BeautifulSoup(filepup.text)
finallink = fpbs.find('br', 'br')
print(finallink)
1 个回答
2
你不能在两个标签之间直接搜索文本,不可以。不过,你可以先找到第一个 <br>
标签,然后再找到它的 下一个兄弟节点。
>>> soup = BeautifulSoup('upload_success<br>http://www.filepup.net/files/R6wVq1405781467.html<br>http://www.filepup.net/delete/Jp3q5w1405781467/R6wVq1405781467.html')
>>> soup.find('br')
<br/>
>>> soup.find('br').next_sibling
u'http://www.filepup.net/files/R6wVq1405781467.html'
你也可以使用 CSS选择器搜索,来查找一个 相邻的兄弟节点,然后再获取它的 前一个 兄弟节点。对于CSS来说,标签是兄弟节点,但在BeautifulSoup中,文本节点也算。
相邻选择器用 +
来连接两个CSS选择器,它会选择第二个。例如,br + br
会选择任何第二个出现的 br
标签。
如果再加上一个父节点(比如特定的id或class),这会是一个非常强大的组合:
>>> soup = BeautifulSoup('''\
... <div id="div1">
... some text
... <br/>
... some target text
... <br/>
... foo bar
... </div>
... <div id="div2">
... some more text
... <br/>
... select me, ooh, pick me!
... <br/>
... fooed the bar!
... </div>
... ''')
>>> soup.select('#div2 br + br')[0]
<br/>
>>> soup.select('#div2 br + br')[0].previous_sibling
u'\n select me, ooh, pick me!\n '
这样就能在特定的 <div>
标签中,精确地找到两个 <br>
标签之间的文本节点。