【问题标题】:Not getting the specific value没有得到具体的价值
【发布时间】:2021-07-21 18:45:40
【问题描述】:

好吧,如果使用 bs4 和 python 的产品,我正在尝试抓取可用性的值,以便知道如果值“En stock”存在则该产品是否可用,否则不存在。然而,即使“En stock”的值是真的,我也得到了一个错误的结果。这是我的代码。谢谢你帮助我

response = requests.get(url, headers=HEADERS)
soupe = bs(response.content, 'html5lib')
data = []
for element in soupe.find_all("div", class_="content-price"):
        dispo = element.find("div", class_="stock").text
        if dispo == " En stock":
            dispo["available"] = True
        else:
            dispo["available"] = False
 data.append(dispo)
def main():
    url ="https://www.e.leclerc/fp/sun-secure-apres-soleil-hydratant-200ml-3401360167834"
    dispo =  parsing(url)   
    print(disp)```

【问题讨论】:

    标签: python-3.x web-scraping beautifulsoup


    【解决方案1】:

    问题是dispo 的文本可能包含额外的空白,请使用.strip() 将其删除。

    import requests
    from bs4 import BeautifulSoup
    
    url = "https://www.e.leclerc/fp/sun-secure-apres-soleil-hydratant-200ml-3401360167834"
    
    soup = BeautifulSoup(requests.get(url).content, "html.parser")
    
    
    for element in soup.find_all("div", class_="content-price"):
        dispo = element.find("div", class_="stock").text
        # check if `dispo` is `None` since calling `.strip()` would raise an error
        if not dispo:
            print("No value found")
            continue
    
        if dispo.strip() == "En stock":
            print("In stock")
        else:
            print("Not in stock")
    

    【讨论】:

      【解决方案2】:

      尝试选择<app-product-availability-state>标签查看可用性状态:

      import requests
      from bs4 import BeautifulSoup
      
      url = "https://www.e.leclerc/fp/sun-secure-apres-soleil-hydratant-200ml-3401360167834"
      response = requests.get(url)
      soup = BeautifulSoup(response.content, "html5lib")
      
      availability = (
          "En stock" in soup.select_one("app-product-availability-state").text
      )
      
      if availability:
          print("Item is in stock")
      else:
          print("Item is NOT in stock")
      

      打印:

      Item is in stock
      

      【讨论】:

      • 感谢您的解决方案 app-product-availability-state 是一个可以随时更改的角度标签
      • @taniiit BeautifulSoup 不执行 javascript,它只解析文本。所以标签<app-product-availability-state>不会改变。
      【解决方案3】:
      import requests
      from bs4 import BeautifulSoup
      
      
      def main(url):
          r = requests.get(url)
          soup = BeautifulSoup(r.text, 'lxml')
          if not soup.select_one('.fas.fa-circle').next_element.strip().startswith('E'):
              print('Item Not Available')
          else:
              print('Item Available')
      
      
      main('https://www.e.leclerc/fp/sun-secure-apres-soleil-hydratant-200ml-3401360167834')
      

      输出:

      Item Available
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-12-21
        • 2018-03-07
        • 2018-12-03
        • 1970-01-01
        • 1970-01-01
        • 2016-10-20
        • 2021-03-28
        • 2016-01-30
        相关资源
        最近更新 更多