Python中BeautifulSoup如何select具有两个class值的标签?
<p class="temp">文本内容</p>
如果 class 里面只有一个值,就用 soup.select('.temp')
<p class="temp temp-low">文本内容</p>
如果有两个的话,不管我写成 soup.select('.temp.temp-low') 还是 soup.select('.temp .temp-low') 结果都不是预期想要的。
Python中BeautifulSoup如何select具有两个class值的标签?
[0]
在BeautifulSoup里用CSS选择器选带多个class的标签,直接用点号连起来就行,但要注意两个class之间不能有空格。
比如你要找同时有class1和class2的<div>标签,就这么写:
from bs4 import BeautifulSoup
html = '''
<div class="class1 class2">目标标签</div>
<div class="class1">只有class1</div>
<div class="class2">只有class2</div>
'''
soup = BeautifulSoup(html, 'html.parser')
# 正确写法:两个class之间没有空格
results = soup.select('div.class1.class2')
print(results) # 输出: [<div class="class1 class2">目标标签</div>]
# 错误写法:加了空格就变成找子元素了
wrong_results = soup.select('div.class1 .class2')
print(wrong_results) # 输出: []
关键点:
div.class1.class2→ 找同时有这两个class的divdiv.class1 .class2→ 找class1的div里面的class2元素(这是错的)
如果class名里有特殊字符(比如冒号、空格),用反斜杠转义或者用属性选择器:
# 方法1:用反斜杠转义
soup.select('div.class\:name.another-class')
# 方法2:用属性选择器(更可靠)
soup.select('div[class="class:name another-class"]')
一句话建议:多个class选择直接用点连,别加空格。
soup.find(‘p’, ,{‘class’: ‘temp temp-low’})
soup.find(‘p’, {‘class’: ‘temp temp-low’})
我想用 select,该怎么做呢?
temps_tag = seven_day.select(’.temp’)
我一般都用 find,你可以尝试通过属性的值来查找
例如:soup.select(‘p[class=“temp temp-low”]’)
你试一下是不是可以,我不确定是否可行
哦,这样似乎不可以。select 就是一层层往下选的。例如: seven_day.select(’.tombstone-container img’)
pyquery 就好了

