繁体   English   中英

Python:find_all() 返回一个空列表

[英]Python : find_all() return an empty list

我正在尝试制作一个机器人,一旦新产品在网站上上线,就会向我发送 email。

我尝试使用requestsbeautifulSoup来做到这一点。

这是我的代码:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM