Python BeautifulSoup在给定类的div中获取所有不同的属性值
假设我有一个带有div的html文件,如下所示:Python BeautifulSoup在给定类的div中获取所有不同的属性值,python,html,beautifulsoup,Python,Html,Beautifulsoup,假设我有一个带有div的html文件,如下所示: 嘿 是我 你好 欧拉 如何获取发送消息的所有用户的列表 如果我使用find方法,我只获得第一个用户,如果我使用find\u all我获得user1两次 我是否可以一步完成,而不删除由find_all制作的列表中的重复项?以下是我只能想到的两种方法: import bs4 r = '''<div class="message" title="user1"> <span> Hey </span> </di
嘿
是我
你好
欧拉
如何获取发送消息的所有用户的列表
如果我使用find
方法,我只获得第一个用户,如果我使用find\u all
我获得user1
两次
我是否可以一步完成,而不删除由
find_all
制作的列表中的重复项?以下是我只能想到的两种方法:
import bs4
r = '''<div class="message" title="user1"> <span> Hey </span> </div>
<div class="message" title="user1"> <span> It's me </span> </div>
<div class="message" title="user2"> <span> Hi </span> </div>
<div class="message" title="user3"> <span> Ola </span> </div>'''
soup = bs4.BeautifulSoup(r,'html.parser')
messages = soup.find_all('div', {'class':'message'})
users_list = []
for user in messages:
user_id = user.get('title')
if user_id not in users_list:
users_list.append(user_id)
导入bs4
r=''嘿
是我
你好
奥拉“
soup=bs4.BeautifulSoup(r,'html.parser')
messages=soup.find_all('div',{'class':'message'})
用户列表=[]
对于邮件中的用户:
user\u id=user.get('title')
如果用户id不在用户列表中:
用户列表。追加(用户id)
或
导入bs4
r=''嘿
是我
你好
奥拉“
soup=bs4.BeautifulSoup(r,'html.parser')
messages=soup.find_all('div',{'class':'message'})
用户列表=列表(为消息中的用户设置([user.get('title]))
您可以使用自定义查找器功能
seen_users = set()
def users(tag):
username = tag.get('title')
if username and 'message' in tag.get('class', ''):
seen_users.add(username)
return True
tags = soup.find_all(users)
print(seen_users) # {'user1', 'user2', 'user3'}
如果不删除重复项,则无法“一步到位”。正常的过程是抓取所有匹配元素,然后过滤这些结果以确定其唯一性。是的,@Ouroborus是对的。您需要将返回的列表设置为一个集合。这类似于字典上的
get
方法。基本上,您可以检索标记的class
属性。如果不存在,则返回值'
(空字符串)。我们使用它是因为默认的None
会导致错误。如果您尝试,如果“无”中的“消息”将引发错误,则类似。哦,现在我明白了。另外,在tags=soup.find_all(users)
中,我不应该传递参数吗?如果我理解得很好,那么标记值是否正确?当您将一个可调用(函数)传递给find_all
时,soup
中的每个标记都会调用它。如果函数返回True
,则会将标记添加到结果集中。详见文档。
seen_users = set()
def users(tag):
username = tag.get('title')
if username and 'message' in tag.get('class', ''):
seen_users.add(username)
return True
tags = soup.find_all(users)
print(seen_users) # {'user1', 'user2', 'user3'}