代码之家  ›  专栏  ›  技术社区  ›  CDNthe2nd

如何删除使用bs4选择的选项?

  •  -2
  • CDNthe2nd  · 技术社区  · 8 年前

    我对这个脚本的想法是制作一个脚本,打印出以下内容

    4,5 5,5 6 7 8,5 9 10

    使用以下HTML:

    <select name="id" style="display: none;">
       <option value="-1" class="selected">
          Choose number
       </option>
       <option value="5011265">
          4,5
       </option>
       <option data-alt="1 kvar" value="5012834">
          5,5
       </option>
       <option value="5011266">
          6
       </option>
       <option value="5011267">
          7
       </option>
       <option data-alt="1 kvar" value="5011269">
          8,5
       </option>
       <option value="5011270">
          9
       </option>
       <option value="5011271">
          10
       </option>
    </select>
    

    我设法用

    nosto_sku_tags = bs4.find_all('select', {'name': 'id'})
    
        product_skus = []
        for nosto_sku_tag in nosto_sku_tags:
    
            try:
                sku_size = nosto_sku_tag
                print(sku_size)
    
            except Exception:
                sku_size = None
    

    选择数字 5,5个 8,5个 9 10

    Choose number .

    选择数字 包括?

    当前打印时打印结果:

    <select name="id">
       <option value="-1">
          Choose number
       </option>
       <option value="5011265">
          4,5
       </option>
       <option data-alt="1 kvar" value="5012834">
          5,5
       </option>
       <option value="5011266">
          6
       </option>
       <option value="5011267">
          7
       </option>
       <option data-alt="1 kvar" value="5011269">
          8,5
       </option>
       <option value="5011270">
          9
       </option>
       <option value="5011271">
          10
       </option>
    </select>
    
    1 回复  |  直到 8 年前
        1
  •  1
  •   Martijn Pieters    8 年前

    如果所说的“选定”是指第一个具有 selected ,您可以简单地测试:

    nosto_sku_tags = bs4.select('select[name="id"] option')
    for nosto_sku_tag in nosto_sku_tags:
        if 'selected' in nosto_sku_tag.get('class', ()):
            continue
        sku_size = nosto_sku_tag.get_text(strip=True)
    

    get_text() 方法)。

    因为 class ,您需要使用 .get('class', ())

    注意我用了 不同的查询 找到 <option> 在HTML中发布的元素。你的代码打印 <select> 元素,作为一个大对象,而不是个体 <选项> <选择> 元素,然后 <选项> CSS selector 直接进入选项。

    :not(.selected) psuedo选择器过滤掉这一个选项。

    >>> nosto_sku_tags = soup.select('select[name="id"] option')
    >>> for nosto_sku_tag in nosto_sku_tags:
    ...     if 'selected' in nosto_sku_tag.get('class', ()):
    ...         continue
    ...     sku_size = nosto_sku_tag.get_text(strip=True)
    ...     print(sku_size)
    ...
    4,5
    5,5
    6
    7
    8,5
    9
    10
    

    < 元素,而没有 挑选出来的 第一

    for nosto_sku_tag in nosto_sku_tags[1:]:
        sku_size = nosto_sku_tag.get_text(strip=True)
    

    注意 [1:] 切片。