提取<div>标签之外的文字BeautifulSoup

时间:2015-07-30 18:18:29

标签: python html beautifulsoup html-parsing

所以我练习刮刮,我遇到了这样的事情:

<div class="profileDetail">
    <div class="profileLabel">Mobile : </div>
     021 427 399 
</div>

我需要<div>标记之外的数字:

我的代码是:

num = soup.find("div",{"class":"profileLabel"}).text

但是Mobile :的输出只是<div>标记内的文字而不是其外的文字。

那么我们如何在<div>标签之外提取文字?

2 个答案:

答案 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.Tagbs4.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