使用requests.get爬取olx网站无返回、提取元素为空列表是什么原因?
问题原因及解决方法
核心原因
- 你已经定义了模拟浏览器身份的
headers变量,但调用requests.get()时未传入该参数。站点的反爬策略会识别到requests的默认UA标识python-requests/xxx,直接拦截请求,返回的页面并非正常的职位列表页,自然解析不到ads__item类的div元素。
其他可能原因
- 请求返回状态码异常:可以先打印
r.status_code验证请求结果,若返回403则明确是反爬拦截,若返回404说明请求地址有误,返回5xx为站点服务端异常。 - 页面数据动态渲染:即使添加请求头后正常返回200状态码,也可能存在列表数据由JS异步加载的情况,静态HTML源码中本身不存在
ads__item元素,需要抓异步数据接口请求,或使用Selenium、Playwright等工具模拟浏览器渲染后再解析。 - 解析依赖未安装:你使用了
lxml作为BeautifulSoup的解析器,若未提前安装该库也可能导致解析异常,可执行pip install lxml安装后重试。
修复后的基础代码
import requests from bs4 import BeautifulSoup baseurl = "https://www.olx.com.eg/" headers = { 'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.63 Safari/537.36' } # 新增headers参数传入 r = requests.get('https://www.olx.com.eg/jobs/', headers=headers) # 可先打印返回内容确认是否为目标页面 # print(r.text) soup = BeautifulSoup(r.content, 'lxml') product_list = soup.findAll('div',class_ = 'ads__item') print(product_list)
内容的提问来源于stack exchange,提问作者Seif Mahdi
相关产品推荐
相关产品推荐

