今天我正在查看一个小文件上传器,我从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)
答案 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>
标记之间选择一个非常具体的文本节点。