在 Python 的 span 标签中查找多个属性
Finding multiple attributes within the span tag in Python
我想从网站上抓取两个值。它们存在于以下标签中:
<span class="sp starBig">4.1</span>
<span class="sp starGryB">2.9</span>
我需要值 sp starBig、sp starGryB。
我使用的 findAll 表达式是 -
soup.findAll('span', {'class': ['sp starGryB', 'sp starBig']}):
代码执行无任何错误,但未显示任何结果。
可能有更好的方法,但目前我没有找到。可以使用 css 选择器来完成,如下所示:
html = '''<span class="sp starBig">4.1</span>
<span class="sp starGryB">2.9</span>
<span class="sp starBig">22</span>'''
soup = bs4.BeautifulSoup(html)
selectors = ['span.sp.starBig', 'span.sp.starGryB']
result = []
for s in selectors:
result.extend(soup.select(s))
根据 docs,假设 Beautiful Soup 4,用 'sp starGryB'
这样的字符串匹配多个 CSS 类 是脆弱的,不应该这样做:
soup.find_all('span', {'class': 'sp starGryB'})
# [<span class="sp starGryB">2.9</span>]
soup.find_all('span', {'class': 'starGryB sp'})
# []
CSS selectors 应该改用,像这样:
soup.select('span.sp.starGryB')
# [<span class="sp starGryB">2.9</span>]
soup.select('span.starGryB.sp')
# [<span class="sp starGryB">2.9</span>]
你的情况:
items = soup.select('span.sp.starGryB') + soup.select('span.sp.starBig')
或更复杂的东西,例如:
items = [i for s in ['span.sp.starGryB', 'span.sp.starBig'] for i in soup.select(s)]
soup.findAll('span', {'class': ['sp starGryB', 'sp starBig']})
这段代码很有用,对我来说效果很好
我想从网站上抓取两个值。它们存在于以下标签中:
<span class="sp starBig">4.1</span>
<span class="sp starGryB">2.9</span>
我需要值 sp starBig、sp starGryB。
我使用的 findAll 表达式是 -
soup.findAll('span', {'class': ['sp starGryB', 'sp starBig']}):
代码执行无任何错误,但未显示任何结果。
可能有更好的方法,但目前我没有找到。可以使用 css 选择器来完成,如下所示:
html = '''<span class="sp starBig">4.1</span>
<span class="sp starGryB">2.9</span>
<span class="sp starBig">22</span>'''
soup = bs4.BeautifulSoup(html)
selectors = ['span.sp.starBig', 'span.sp.starGryB']
result = []
for s in selectors:
result.extend(soup.select(s))
根据 docs,假设 Beautiful Soup 4,用 'sp starGryB'
这样的字符串匹配多个 CSS 类 是脆弱的,不应该这样做:
soup.find_all('span', {'class': 'sp starGryB'})
# [<span class="sp starGryB">2.9</span>]
soup.find_all('span', {'class': 'starGryB sp'})
# []
CSS selectors 应该改用,像这样:
soup.select('span.sp.starGryB')
# [<span class="sp starGryB">2.9</span>]
soup.select('span.starGryB.sp')
# [<span class="sp starGryB">2.9</span>]
你的情况:
items = soup.select('span.sp.starGryB') + soup.select('span.sp.starBig')
或更复杂的东西,例如:
items = [i for s in ['span.sp.starGryB', 'span.sp.starBig'] for i in soup.select(s)]
soup.findAll('span', {'class': ['sp starGryB', 'sp starBig']}) 这段代码很有用,对我来说效果很好