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

Python requests请求未返回完整HTML源代码如何解决

问题根因

你只能拿到45行截断内容,核心是两个问题:

  • 触发了站点反爬机制:Louis Vuitton官网有成熟的爬虫拦截规则,你当前代码里用的Chrome 56版本UA是2017年的老旧版本,本身就属于异常流量特征,加上原生requests库的TLS握手指纹和真实浏览器差异明显,请求会被直接判定为爬虫,返回截断的异常响应,而非正常用户访问的完整页面。
  • 未获取JS动态渲染内容:这类电商站点的商品详情、模块内容都不是直接写在初始返回的静态HTML里,而是页面加载完成后通过JS异步拉取数据、渲染生成DOM节点。requests只能拿到最开始返回的静态HTML骨架,不会执行页面内的JS代码,自然拿不到后续渲染的完整内容。你手动右键查看源码看到的内容,是浏览器完成所有渲染、资源加载后的完整结果,和requests拿到的初始响应不是一个东西。
可行解决方案
  • 替换老旧的请求头UA,使用当前主流版本的浏览器UA,避免因为UA版本过低被标记。
  • 绕过基础指纹校验:原生requests的TLS指纹极易被识别,可以替换为curl_cffi库模拟真实浏览器的TLS指纹发请求,绕过第一层反爬拦截。
  • 如果需要拿到和手动访问完全一致的完整DOM,放弃requests+BeautifulSoup的静态爬取组合,改用可执行JS的浏览器自动化工具,比如Playwright、Selenium,驱动真实浏览器内核访问页面,等所有网络请求完成、JS渲染结束后再提取页面源码。

参考实现代码:

from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    # 启动无头Chrome浏览器
    browser = p.chromium.launch(headless=True)
    # 配置当前主流版本UA
    context = browser.new_context(
        user_agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36"
    )
    page = context.new_page()
    # 访问目标页,等待网络空闲(所有异步请求完成)后再取内容
    page.goto("https://us.louisvuitton.com/eng-us/products/louis-vuitton-and-nike-air-force-1-by-virgil-abloh-white-white-white-nvprod3690049v/1A9V88", wait_until="networkidle")
    full_page_html = page.content()
    print(full_page_html)
    browser.close()

注意:这类站点对异常请求的拦截阈值很低,不要短时间内高频重复请求,否则会直接封禁对应IP的访问权限。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 09:57:19