首页 > 解决方案 > 如何将 find_all 2 次应用于解析

问题描述

我正在尝试制作一个可以抓取网站的网络刮刀

  • 使用类 product_cat-riso,它会找到所有
  • 的,但是我想检查它们是否有库存 - 有库存的也有类 'instock' 作为 product_cat-riso 的补充。我曾尝试在这里使用 filter() ,但不工作。

    from bs4 import BeautifulSoup
    import requests
    
    url = 'https://eshop.ciernediery.sk/'
    req = requests.get(url, timeout=5)
    soup = BeautifulSoup(req.content, 'html.parser')
    lst = soup.find_all('li', class_='product_cat-riso')
    
    def fltr(item):
        if 'instock' in item:
            return True
        else:
            return False
    in_stock = filter(fltr, lst)
    for item in in_stock:
        print(item)
    
  • 标签: pythonweb-scrapingbeautifulsoup

    解决方案


    我将假设您只列出了其中一个类名的一部分,并且完整的类名是product_cat-risografiky(来自多值类的单个)。我很想缩写 of 的逻辑,fltr()然后确保成员资格测试在标签的类值列表中,而不是在标签对象中。

    from bs4 import BeautifulSoup
    import requests
    
    def fltr(item):
        return 'instock' in item['class']
    
    url = 'https://eshop.ciernediery.sk/'
    req = requests.get(url, timeout=5)
    soup = BeautifulSoup(req.content, 'html.parser')
    lst = soup.find_all('li', class_='product_cat-risografiky')
    # lst = soup.select('li.product_cat-risografiky')
    
    in_stock = filter(fltr, lst)
    
    for item in in_stock:
        print(item)
    

    推荐阅读