所以我练习刮刮,我遇到了这样的事情:
<div class="profileDetail">
<div class="profileLabel">Mobile : </div>
021 427 399
</div>
我需要<div>
标记之外的数字:
我的代码是:
num = soup.find("div",{"class":"profileLabel"}).text
但是Mobile :
的输出只是<div>
标记内的文字而不是其外的文字。
那么我们如何在<div>
标签之外提取文字?
答案 0 :(得分:4)
我会创建可重复使用的功能以按标签获取值,通过text
找到标签并获取next sibling:
import re
def find_by_label(soup, label):
return soup.find("div", text=re.compile(label)).next_sibling
用法:
find_by_label(soup, "Mobile").strip() # prints "021 427 399"
答案 1 :(得分:1)
尝试使用soup.find("div",{"class":"profileLabel"}).next_sibling
,这会抓住下一个元素,可以是bs4.Tag
或bs4.NavigableString
。
bs4.NavigableString
是您在这种情况下尝试获得的内容。
elem = soup.find("div",{"class":"profileLabel"}).next_sibling
print type(elem)
# Should return
bs4.element.NavigableString
In [4]: s = bs4.BeautifulSoup('<div> Hello </div>HiThere<p>next_items</p>', 'html5lib')
In [5]: s
Out[5]: <html><head></head><body><div> Hello </div>HiThere<p>next_items</p></body></html>
In [6]: s.div
Out[6]: <div> Hello </div>
In [7]: s.div.next_sibling
Out[7]: u'HiThere'
In [8]: type(s.div.next_sibling)
Out[8]: bs4.element.NavigableString