Python BeautifulSoup为findAll提供了多个标签

时间:2013-12-18 02:28:35

标签: python beautifulsoup

我正在寻找一种方法来使用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'的页面上使用它,那么它将获得所有这些标签,如果我在两者上使用它将获得'强'标签。

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

3 个答案:

答案 0 :(得分:68)

您可pass a list找到hrstrong代码:

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

答案 1 :(得分:8)

使用正则表达式:

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

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

答案 2 :(得分:0)

要查找多个标签,您可以使用, CSS selector,您可以在其中指定以逗号,分隔的多个标签。

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

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

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