选择BS4 Python上的特定标记

2024-04-18 19:31:47 发布

您现在位置: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\u选项),我如何才能只获得我需要的信息

谢谢


Tags: datasizecodeliproductthiswrapperclass
1条回答
网友
1楼 · 发布于 2024-04-18 19:31:47

您不想要的数据有一个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())

相关问题 更多 >