错误:NoneType'对象没有属性'find_all'

问题描述 投票:0回答:1

我有一些基本的代码用于从页面中提取数据,问题是一周前它停止工作并且我收到错误

'NoneType' object has no attribute 'find_all'
,也许页面代码中的某些内容发生了变化,我已经尝试修复它但是我不能。帮帮我,谢谢。

    import requests
    from bs4 import BeautifulSoup as bs

    headers = {
    "user-agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) 
    Ubuntu Chromium/71.0.3578.80 Chrome/71.0.3578.80 Safari/537.36",
    }

    url = "https://www.weplay.cl/new-arrival-funko-pop#/w/0/list/all/"

   req = requests.get(url)
   soup = bs(req.text, 'html.parser')
   contenedor_de_productos = soup.find(class_="products-grid products-grid grid")
   lista_de_productos = contenedor_de_productos.find_all('li', class_='product-item')

   for producto in lista_de_productos:
       texto_producto = producto.find(class_='product-item-name').text
       texto_producto = texto_producto.replace('\n', '').replace('\t', '').replace(',', 
       '').replace('"', '').strip()
       print(texto_producto)
python web-scraping beautifulsoup
1个回答
0
投票

是的,他们改变了网站结构,之前他们可能会在第一个请求本身中获取 HTML 页面中的所有数据,但现在数据来自不同的请求。数据来自 JavaScript 请求,并且它们正在渲染它,因此您的 XPATH 和代码无法正常工作。如果您看到给定 URL 的响应,您会得到类似“请稍等...”的信息。

为了使您的代码正常工作,我们有两种解决方案,即

  1. 尝试使用selenium浏览器,这里浏览器只会在后端发出请求并渲染数据,以便您可以获取数据并解析。
  2. 识别 JavaScript 请求并发出该请求,这里 link 他们发出此请求是为了获取后端的所有数据并加载数据,因此您可以发出此请求并获取您想要的任何数据。

我发现您需要产品名称,因此您可以简单地从上述请求中获取所有这些产品名称。

© www.soinside.com 2019 - 2024. All rights reserved.