Python HTML解析两个标签之间

时间:2014-07-19 14:58:26

标签: python html parsing beautifulsoup

今天我正在查看一个小文件上传器,我从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 个答案:

答案 0 :(得分:2)

您无法在两个标签之间搜索文字,没有。您可以找到第一个<br>代码,然后选择next sibling,但是:

>>> 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 selector search搜索adjacent sibling,然后抓住前面的兄弟;对于CSS,只有标签是兄弟,但对于BeautifulSoup,文本节点也是重要的。

两个CSS选择器之间的相邻选择是+,并选择两个中的第二个; br + br会选择排在第二位的任何br标记。

与父节点(比如特定的id或类)一起构成一个非常强大的组合:

>>> 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    '

这会在特定<br>标记中的两个<div>标记之间选择一个非常具体的文本节点。