我正在寻找一种方法来使用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'的页面上使用它,那么它将获得所有这些标签,如果我在两者上使用它将获得'强'标签。
有办法做到这一点吗?我主要关心的是保留标签的查找顺序。
答案 0 :(得分:68)
您可pass a list找到hr
或strong
代码:
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')