【问题标题】:Python BeautifulSoup give multiple tags to findAllPython BeautifulSoup 给 findAll 多个标签
【发布时间】:2024-12-03 04:00:02
【问题描述】:

我正在寻找一种方法来使用 findAll 来获取两个标签,按照它们在页面上出现的顺序。

目前我有:

import requests
import BeautifulSoup

def get_soup(url):
    request = requests.get(url)
    page = request.text
    soup = BeautifulSoup(page)
    get_tags = soup.findAll('hr' and 'strong')
    for each in get_tags:
        print each

如果我在一个只有“em”或“strong”的页面上使用它,那么它会得到所有这些标签,如果我在一个页面上同时使用它会得到“strong”标签。

有没有办法做到这一点?我主要关心的是保留标签的顺序。

【问题讨论】:

    标签: python beautifulsoup


    【解决方案1】:

    要查找多个标签,您可以使用,CSS selector,在这里您可以指定多个标签,用逗号分隔,

    要使用 CSS 选择器,请使用 .select_one() 方法代替 .find(),或使用 .select() 代替 .find_all()

    例如,要选择所有<hr> strong 标签,用, 分隔标签:

    tags = soup.select('hr, strong')
    

    【讨论】:

      【解决方案2】:

      你可以pass a list,找到任何给定的标签:

      tags = soup.find_all(['hr', 'strong'])
      

      【讨论】:

      • 我认为soup.findAll(['hr', 'strong']) 可以完成这项工作,find_all 不运行。
      • @r0sk: find_all() 是 beautifulsoup4 上的正确名称。点击答案中的链接。 findAll() 用于 BeautifulSoup 3 被 Beautiful Soup 4 取代。
      【解决方案3】:

      使用正则表达式:

      import re
      get_tags = soup.findAll(re.compile(r'(hr|strong)'))
      

      表达式r'(hr|strong)' 将找到hr 标签或strong 标签。

      【讨论】: