获取包含字符串的参数属性

2024-06-01 09:51:46 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我们有一个html,如下所示:

<span title="Sports Football">Football</span>
<span title="Sports Badminton">Tennis</span>
<span title="Sports Ski Jump">Ski Jump</span>

如果title属性包含Sports,我想提取它的参数:

最后我们有一个变量sports

sports = ['Football', 'Badminton', 'Ski Jump']

我用的是:

sports = soup.find_all('span', {'title': 'Sports'})

我什么都没有


Tags: 参数属性titlehtmlallfindspansoup
3条回答

你什么也得不到,因为没有一个固定的标题只是命名为Sports,它不像通配符那样工作。如果要获取title的属性值,可以在使用find_all获得的标记对象上使用get(attr_name)。你知道吗

from bs4 import BeautifulSoup

html = '''<span title="Sports Football">Football</span>
<span title="Sports Badminton">Tennis</span>
<span title="Sports Ski Jump">Ski Jump</span>'''

soup = BeautifulSoup(html,"lxml")

title = [s.get('title') for s in soup.find_all('span')]
title
>> ['Sports Football', 'Sports Badminton', 'Sports Ski Jump']

除此之外,如果您只需要该元素的文本,只需对来自find_all的标记对象使用.text方法即可。你知道吗

sports = [s.text for s in soup.find_all('span')]
sports
>>['Football', 'Tennis', 'Ski Jump']

如果title属性的第一部分是"Sports",则可以使用re.compileBeautifulSoup来查找所有span标记:

content = """
 <span title="Sports Football">Football</span>
 <span title="Sports Badminton">Tennis</span>
 <span title="Sports Ski Jump">Ski Jump</span>
"""

import re
from bs4 import BeautifulSoup as soup
d = soup(content, 'html.parser')
results = [i.text for i in d.find_all('span', {'title':re.compile('^Sports\s')})]

输出:

['Football', 'Tennis', 'Ski Jump']

也许你所举的例子是从你的头顶编造出来的,但是你的跨距的内容与你想要的完全匹配——所以在这个例子中,你可以通过以下方法来解决: sports = soup.find_all('span', {'title': 'Sports'}).contents 这将为您提供所需内容的字符串版本。你知道吗

相关问题 更多 >