[英]Python : find_all() return an empty list
我正在尝试制作一个机器人,一旦新产品在网站上上线,就会向我发送 email。
我尝试使用requests和beautifulSoup来做到这一点。
这是我的代码:
import requests
from bs4 import BeautifulSoup
URL = 'https://www.vinted.fr/vetements?search_text=football&size_id[]=207&price_from=0&price_to=15&order=newest_first'
headers = {'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36"}
page = requests.get(URL, headers=headers)
soup = BeautifulSoup(page.content, 'html.parser')
products = soup.find_all("div", class_="c-box")
print(len(products))
接下来,我想在一个循环中比较我的新请求之前和之后的产品数量。
但是当我尝试查看找到的产品数量时,我得到一个空列表: []
我不知道如何解决这个问题...
我用的div在别人的div里,不知道有没有关系
提前致谢
您尝试解析的网站有问题。
在网站完全加载后,代码中的网站会在客户端使用 javascript 生成您正在寻找的元素 ( div.c-box
)。 所以它就像:
浏览器从服务器获取 HTML 源 --(1)--> JS 文件在浏览器加载时加载 html 源 --> JS 文件将元素添加到 HTML 源 --(2)-- 将这些元素加载到浏览器
您无法通过requests.get
获取所需的数据,因为requests.get
方法只能在 (1) 点获取 HTML 源,但网站会在 (2) 点加载数据。 要获取此类数据,您应该使用自动浏览器模块,例如selenium
。
你应该经常检查数据。
使用soup.decode('utf-8')
将您的 BeautifulSoup object 转换为字符串并将其写入文件。 然后检查你从网站上得到什么。 在这种情况下,没有带有 c-box class 的元素。
您应该使用selenium
而不是requests
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.