小能豆

Python HTML 解析两个标签之间

py

今天,我正在研究一个小型文件上传器,并从 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)

阅读 70

收藏
2025-02-21

共1个答案

小能豆

您无法在两个标签之间搜索文本。您可以找到第一个<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    '

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

2025-02-21