首页 文章

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

提问于
浏览
3

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

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

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

我的代码是:

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

但是它的输出是 Mobile : 只是它是 <div> 标签内的文本而不是它外面的文本 .

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

2 回答

  • 1

    我会创建一个可重用的函数来通过标签获取值,通过 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"
    
  • 3

    尝试使用 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
    

相关问题