今天,我正在研究一个小型文件上传器,并从 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)
您无法在两个标签之间搜索文本。您可以找到第一个<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>
标签中选择一个非常具体的文本节点。