如何用Python/Selenium绕过autoscout24.de的分页限制爬取全量数据
绕过Autoscout24分页限制的可行方案
细分搜索结果集
原搜索的宝马车型结果量过大,导致分页超出20页上限。可以通过添加筛选参数拆分结果:- 按车型细分:在URL中加入
model=3(对应3系)、model=5(对应5系)等参数,缩小单批次结果数量; - 按价格区间:添加
pricefrom=0&priceto=10000、pricefrom=10000&priceto=20000这类参数,拆分不同价位的车辆; - 按年份/里程:加入
yearfrom=2015&yearto=2020或mileagefrom=0&mileageto=50000参数,进一步缩小范围。
每个细分后的结果集页数会控制在20以内,逐个爬取后合并数据即可。
- 按车型细分:在URL中加入
直接构造分页参数
很多网站仅在前端限制分页显示,但后端并未拦截更大的page参数值。尝试直接修改URL中的分页参数:
原URL可能包含page=1,直接将其改为page=21、page=30等,用Selenium加载该URL,检查是否能返回对应页面的内容。如果有效,就可以循环构造page参数从1到所需的总页数(60000/10=6000页)来爬取。抓取后端API接口
打开浏览器开发者工具(F12),切换到Network面板,刷新页面后查看XHR/Fetch请求,找到加载列表数据的API接口(通常是JSON格式)。这类接口可能使用offset/limit或page/per_page参数来控制返回数据:- 比如找到类似
/api/listings?offset=0&limit=10的接口,将offset逐步增加(0,10,20...)来获取所有数据; - 直接用
requests库请求该接口,比Selenium效率更高,也降低被反爬检测的概率。注意要带上请求头中的Referer、User-Agent等参数,模拟浏览器请求。
- 比如找到类似
轮换代理与User-Agent
如果网站通过IP或请求频率限制分页,可通过以下方式规避:- 代理IP池:使用第三方代理服务,每次爬取一页切换一个代理,Selenium中通过
options.add_argument('--proxy-server=http://ip:port')设置; - 随机User-Agent:每次请求生成不同的UA字符串,Selenium中用
options.add_argument(f'user-agent={random_ua}')设置; - 增加随机延迟:爬取每页后等待2-5秒(
time.sleep(random.uniform(2,5))),模拟真实用户浏览节奏。
- 代理IP池:使用第三方代理服务,每次爬取一页切换一个代理,Selenium中通过
维护会话与清理Cookies
部分网站会通过会话记录用户行为来限制分页,可尝试:- 保持Selenium的浏览器会话,不要频繁关闭重启;
- 每爬取一定页数(比如20页)后,调用
driver.delete_all_cookies()并刷新页面,重新建立会话后继续爬取后续内容。
内容的提问来源于stack exchange,提问作者Csongor
相关产品推荐
相关产品推荐

