我正在尝试解析 Avito,但无论我写什么,都会显示一个空列表,而不是任何数据。任何类,任何标签 - 仍然返回一个空列表。该怎么办?这是我的代码:
import requests
from bs4 import BeautifulSoup
url = 'https://www.avito.ru/'
html = requests.get(url)
soup = BeautifulSoup(html.text, 'lxml')
a = soup.find_all('div', class_='body-titleRow-AvL3d')
print(a)
如果您只是打印响应终端中的请求而到达的 html,您将看到以下内容:
好吧,因此,如果您将相同的代码保存到文件中,您将看到:
但是,如果您通过常规浏览器访问 Avito,您会看到一切正常。事实证明,Avito 可以识别您请求中的自动请求,即使您设置了标头和 cookie,答案也是一样的。
但是你可以使用 selenium,这是在评论中写的。为此,您需要通过运行以下命令使用 pip 安装它:
pip install selenium。
然后,您需要下载适用于您操作系统的 Web 驱动程序,例如 Chrome 的驱动程序,请点击此处。
更多详细信息,您可以在项目本身的页面上阅读。
如果您尚未安装 Google Chrome 浏览器(例如),请安装它。
好吧,这里有一个小例子,它使用 Avito 的页面加载。
这里发生了什么?浏览器以所谓的隐身模式加载,这有助于隐藏浏览器由自动化软件控制的事实。但是,并非总是如此,也并非在所有网站上都如此。然后某些选项被设置到浏览器。转换到 Avito 页面,加载页面,然后我使用你的代码,只加载浏览器接收到的结果。现在,您要查找的标签已成功找到。
所以,是的,对于像 Avito 这样的网站,具有动态内容和各种解析器和抓取工具的保护,您可以使用 selenium。
UPD:我忘了提到,在这个例子中,驱动程序应该在项目目录的“chromedriver”文件夹中。
希望我的解释对你有一点帮助。