python - 在 BS4 Python 上选择特定标签
问题描述
我有以下 HTML
<li class="product-size__option-wrapper">
<a onclick="ACC.productDetail.getNewProductSize(this)" data-option-code="000000000196428006" class="product-size__option">
I WANT THIS</a>
</li>
<li class="product-size__option-wrapper">
<a onclick="ACC.productDetail.getNewProductSize(this)" data-option-code="000000000196428007" class="product-size__option product-size__option--no-stock">
I DONT WANT THIS</a>
</li>
<li class="product-size__option-wrapper">
<a onclick="ACC.productDetail.getNewProductSize(this)" data-option-code="000000000196428006" class="product-size__option">
I WANT THIS</a>
</li>
我使用此代码来获取数据
linksize =soup.find_all('li', class_='product-size__option-wrapper')
productsize = []
for size in linksize:
for size_available in size.find_all('a', {'class':['product-size__option']}):
productsize.append(size_available.text.strip())
但是它得到了两个标签,因为它共享同一个类(product-size__option),我怎样才能只获得我需要的信息?
谢谢
解决方案
你不想要的数据有一个 CSS 类product-size__option--no-stock
。您可以通过执行以下检查来检查元素是否不包含此类:if 'product-size__option--no-stock' not in size_available.attrs['class']
例如:
from bs4 import BeautifulSoup
html = '''<li class="product-size__option-wrapper">
<a onclick="ACC.productDetail.getNewProductSize(this)" data-option-code="000000000196428006" class="product-size__option">
I WANT THIS</a>
</li>
<li class="product-size__option-wrapper">
<a onclick="ACC.productDetail.getNewProductSize(this)" data-option-code="000000000196428007" class="product-size__option product-size__option--no-stock">
I DONT WANT THIS</a>
</li>'''
soup = BeautifulSoup(html, 'html.parser')
linksize =soup.find_all('li', class_='product-size__option-wrapper')
productsize = []
for size in linksize:
for size_available in size.find_all('a', {'class':['product-size__option']}):
if 'product-size__option--no-stock' not in size_available.attrs['class']:
productsize.append(size_available.text.strip())
推荐阅读
- regex - 正则表达式检查字符串中出现的多个字符
- ios - Swift Navigationbar 搜索栏在单击时关闭搜索文本
- javascript - 如何在页面之间/跨页面传递/发送状态?
- azure - Microsoft graph 在订阅第 12 组订阅的通知 API 时出现 403 Forbidden 错误
- ios - 使用 UIBezierPath 在 2 点之间绘制波浪
- c++ - 为什么 C++ 关联容器谓词默认不透明?
- qualtrics - 联系参与者反应的方法
- javascript - 如何修复代码以淡化按钮并在单击时将按钮更改为蓝色?
- r - lm.wfit(x, y, w, offset = offset,singular.ok =singular.ok, : 0 (non-NA) 情况下的错误。但所有列都至少包含一个非 NA 值
- javascript - 是否可以在每个承诺完成后运行回调,然后在全部完成后运行另一个?