【问题标题】:Beautiful soup get tag values that follow after the matched tag value美丽的汤得到匹配的标签值之后的标签值
【发布时间】:2021-05-03 00:09:24
【问题描述】:

我有一个代码,我需要在其中查找值为 'Lead' 的 div 标记,一旦在代码中找到该标记,它就会查找值为 'name' 的直接 div,然后提取电子邮件 ID紧接的下一个标签,这样我的代码就可以输出名称和电子邮件 ID,如下所示

John Doe john.doe@johndoe.com

 <div class="badge memberType Member long notAffiliatedContact">Lead</div>
 <div class="name"><a href="/10016/John Doe">John Doe</a></div>
 <div class="posted"><span class="label">Email: </span><span class="value break-word">john.doe@johndoe.com</span></div>

非常感谢。

【问题讨论】:

    标签: python html beautifulsoup tags


    【解决方案1】:

    您可以使用findNext() 找到下一个元素。

    from bs4 import BeautifulSoup
    
    html = """
    <div class="badge memberType Member long notAffiliatedContact">Lead</div>
     <div class="name"><a href="/10016/John Doe">John Doe</a></div>
     <div class="posted"><span class="label">Email: </span><span class="value break-word">john.doe@johndoe.com</span></div>
     """
    soup = BeautifulSoup(html, 'html.parser')
    divs = soup.findAll("div", {"class": "badge"})
    for div in divs:
        if div.text == "Lead":
            name = div.findNext('div')
            email = name.findNext('span').findNext('span')
    print(name.text, email.text)
    #John Doe john.doe@johndoe.com
    

    【讨论】:

    • 感谢您的回答,尽管我有一个小问题,为什么这里使用术语“name.findNext”?
    • 这是因为代码找到了包含'Lead'的div,并将下一个div分配给name。然后它将使用name.findNext()name 之后找到下一个span,并将其分配给email。相当于div.findNext('div').findNext()
    猜你喜欢
    • 2017-10-19
    • 2018-07-18
    • 1970-01-01
    • 2017-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-22
    • 1970-01-01
    相关资源
    最近更新 更多