我该如何刮擦具有特定名称的课程

时间:2019-03-20 22:04:40

标签: python selenium beautifulsoup

我正在尝试刮所有带有名称的类

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数据

请某人帮助

2 个答案:

答案 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')

请注意,复合类以“。”连接。