【问题标题】:Extract Few Values with Beautiful Soup用美汤提取少数价值
【发布时间】:2017-03-07 11:27:18
【问题描述】:
 <p class="">
    Teacher:
<a href="/name/nm12345/?ref_=adv_0"
>Scott</a>
             <span class="ghost">|</span> 
    Students:
<a href="/name/nm12345/?ref_=adv_1"
>Benedict</a>, 
<a href="/name/nm12345/?ref_=adv_2"
>Chiwetel</a>, 
<a href="/name/nm12345/?ref_=adv_3"
>Rachel</a>, 
<a href="/name/nm12345/?ref_=adv_4"
>Benedict Wong</a>
    </p>

我想提取老师的名字 - “Scott”,它在“Teacher”标签下,并在“Students”标签下提取所有学生的名字。我试过: soup.find(lambda tag:tag) 它返回了

<a href="/name/nm12345/?ref_=adv_0"
>Scott</a>

我认为这不是一个正确的方法。代码实际上应该如何提取“老师”和“学生”标签下的名字?

【问题讨论】:

    标签: tags beautifulsoup


    【解决方案1】:

    假设您的 HTML 块在解析其他页面时不会发生太大变化,您可以按类找到您的 p 标记(您的示例没有)并验证 Teacher 文本是否存在。

    如果是从元素上的第一个a的p标签中获取.contents[1]

    接下来查找所有href 属性与您的老师不匹配的a 标签。

    例子:

    from bs4 import BeautifulSoup
    
    example = """<p class="">
    Teacher:
    <a href="/name/nm12345/?ref_=adv_0"
    >Scott</a>
             <span class="ghost">|</span> 
    Students:
    <a href="/name/nm12345/?ref_=adv_1"
    >Benedict</a>, 
    <a href="/name/nm12345/?ref_=adv_2"
    >Chiwetel</a>, 
    <a href="/name/nm12345/?ref_=adv_3"
    >Rachel</a>, 
    <a href="/name/nm12345/?ref_=adv_4"
    >Benedict Wong</a>
    </p>"""
    
    soup = BeautifulSoup(example, "html.parser")
    
    Classroom = soup.find(lambda x: "Teacher" in x.get_text())
    
    if Classroom is not None:
    
        Teacher = Classroom.contents[1]
        TeacherUrl = Teacher["href"]
    
        Students = Classroom.find_all(lambda tag: tag.has_attr('href') and TeacherUrl not in tag["href"])
    
        print (Teacher.text)
        for Student in Students:
            print (Student.text)
    

    哪些输出:

    斯科特

    本尼迪克特

    切韦特尔

    雷切尔

    本尼迪克特·王

    【讨论】:

      猜你喜欢
      • 2015-05-08
      • 2021-04-03
      • 1970-01-01
      • 2015-03-18
      • 2012-08-01
      • 2017-12-11
      • 1970-01-01
      • 2016-09-11
      • 1970-01-01
      相关资源
      最近更新 更多