You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用requests-html的HTMLSession爬取时&page参数失效求助

解决requests-html请求分页URL返回第一页内容的问题

问题分析

你遇到的核心问题是:手动拼接&page=X参数后,requests-html返回的始终是第一页内容,这通常是请求头不完整、会话Cookie未正确建立或参数传递的编码问题导致的,结合目标站点(finn.no二手车搜索页)的特性,以下是针对性解决方案。

解决方案步骤

1. 改用params字典传递参数,避免编码错误

不要手动拼接URL参数,用params字典让requests自动处理参数编码,避免因字符转义问题导致参数未被服务器识别:

from requests_html import HTMLSession
from fake_useragent import UserAgent

ua = UserAgent()
session = HTMLSession()

# 基础URL与初始参数
base_url = "https://www.finn.no/car/used/search.html"
params = {
    "model": "1.8078.2000555",
    "page": 1  # 初始页码
}

2. 完善请求头,模拟真实浏览器

仅用随机User-Agent可能不够,添加Referer、Accept等字段,降低被反爬拦截的概率:

headers = {
    "User-Agent": ua.random,
    "Referer": f"{base_url}?model=1.8078.2000555",  # 来源页设为第一页URL
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
    "Accept-Language": "en-US,en;q=0.5"
}

3. 先建立会话Cookie,再请求分页

部分网站会验证会话状态,先请求首页获取必要Cookie,再发起分页请求:

# 初始化会话,获取首页Cookie
session.get(base_url, params={"model": "1.8078.2000555"}, headers=headers)

# 分页爬取逻辑
page = 1
while True:
    params["page"] = page
    response = session.get(base_url, params=params, headers=headers)
    html = response.html

    # 检查停止爬取的特定标签(替换为你的实际选择器和文本)
    stop_tag = html.find(".你的停止标签选择器", first=True)
    if stop_tag and "你的特定停止文本" in stop_tag.text:
        print("无更多页面,停止爬取")
        break

    # 处理当前页内容(替换为你的业务逻辑)
    print(f"正在处理第 {page} 页")
    # 示例:提取车辆标题
    titles = html.find(".ads__unit__content__title")
    for title in titles:
        print(title.text)

    page += 1

4. 额外注意事项

  • 如果目标页面是JS动态渲染内容(即使URL带page参数),需要调用html.render()方法启动无头浏览器加载内容,但这会增加资源消耗,建议先尝试上述无渲染方案;
  • fake_useragent偶尔会出现获取失败的情况,可以添加备用User-Agent:
    try:
        user_agent = ua.random
    except:
        user_agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"
    

内容的提问来源于stack exchange,提问作者Snasegh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 15:23:24