我正在尝试刮所有带有名称的类
all_posts = soup.findAll(class_='s-result-item celwidget')
但是问题是它显示为空。
如果我删除celwidget并尝试此操作
all_posts = soup.findAll(class_='s-result-item')
它带有结果,但随后又包含了两个类
s-result-item celwidget
s-result-item aok-hidden
我只需要s-result-item celwidget
数据
请某人帮助
答案 0 :(得分:0)
使用您可以找到的模块。
import re
all_posts = soup.findAll(class_=re.compile("celwidget"))
例如:
from bs4 import BeautifulSoup
import re
data='''<html>
<div class="s-result-item celwidget">Text1</div>
<div class="s-result-item aok-hidden">Text2</div>
</html>'''
soup=BeautifulSoup(data,"html.parser")
all_posts = soup.findAll(class_=re.compile('celwidget'))
for post in all_posts:
print(post.text)
选项2 :
from bs4 import BeautifulSoup
data='''<html>
<div class="s-result-item celwidget">Text1</div>
<div class="s-result-item aok-hidden">Text2</div>
</html>'''
soup=BeautifulSoup(data,"html.parser")
all_posts = soup.find_all(class_="s-result-item")
print(all_posts[0].text)
选项3:使用select_one
from bs4 import BeautifulSoup
data='''<html>
<div class="s-result-item celwidget">Text1</div>
<div class="s-result-item aok-hidden">Text2</div>
</html>'''
soup=BeautifulSoup(data,"html.parser")
all_posts = soup.select_one('.s-result-item.celwidget')
print(all_posts.text)
答案 1 :(得分:0)
您要匹配该复合类的多种情况。如果使用CSS选择器,则需要使用select
而不是select_one
,因为select_one
仅返回第一个匹配项
soup=BeautifulSoup(data,"lxml")
all_posts = soup.select('.s-result-item.celwidget')
请注意,复合类以“。”连接。