代码之家  ›  专栏  ›  技术社区  ›  Horai Nuri

Python-如何使用BeautifulSoup将一个类定位到另一个类中?

  •  1
  • Horai Nuri  · 技术社区  · 9 年前

    我正在学习用beautuloup和Python 3创建一个爬虫,我遇到了一个问题,我想在一个网站上获取的数据有多个类,这里有一个示例:

    <tr class="phone">
      <a href="..." class="number"></a>
    </tr> 
    
    <tr class="mobile">
      <a href="..." class="number"></a>
    </tr> 
    

    下面是我想用Python做的事情:

    for num in soup.findAll('a', {'class':'mobile -> number'}):
        print(num.string)
    

    我应该做什么来针对班级 .mobile .number ?

    2 回复  |  直到 9 年前
        1
  •  2
  •   Robᵩ    9 年前

    您可以使用 soup.select 根据 CSS selector .

    from bs4 import BeautifulSoup
    
    
    html_doc = '''<tr class="phone">
      <a href="tel:+18005551212" class="number"></a>
    </tr> 
    
    <tr class="mobile">
      <a href="+13034997111" class="number"></a>
    </tr> '''
    
    soup = BeautifulSoup(html_doc)
    
    # Find any tag with a class of "number"
    # that is a descendant of a tag with
    # a class of "mobile"
    mobiles = soup.select(".mobile .number")
    print mobiles
    
    # Find a tag with a class of "number"
    # that is an immediate descendent
    # of a tag with "mobile"
    mobiles = soup.select(".mobile > .number")
    print mobiles
    
    # Find an <a class=number> tag that is an immediate
    # descendent of a <tr class=mobile> tag.
    mobiles = soup.select("tr.mobile > a.number")
    print mobiles
    
        2
  •  1
  •   Pandemonium    9 年前

    find_all() 元素,然后遍历列表并打印其 parent 的类是“移动”。

    for dom in soup.find_all("a", "number"):
        # this returns a list of class names
        for class in dom.parent()["class"]:     
        if class == "mobile":
            print(dom.string)
    

    或使用 select() 用于CSS选择器样式

    for dom in soup.select("tr.mobile a.number"):
        print(dom.string)