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

Python爬取sky.lea.moe时返回HTML与浏览器页面源不一致的问题求助

解决使用requests爬取sky.lea.moe时返回内容不一致的问题

我之前处理过不少类似的反爬场景,你遇到的问题本质是这个网站启用了浏览器检测机制——它会验证请求是否来自真实的浏览器环境,而你的requests请求只带了User-Agent,缺少其他关键的请求头信息,甚至可能部分内容是通过JavaScript动态渲染的,requests无法解析执行JS,所以拿到的是被拦截后的页面内容。

下面给你几个可行的解决方案:

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

除了User-Agent,真实浏览器发送请求时还会携带很多其他头信息,比如Accept、Accept-Language、Referer等,把这些补充到请求头里,大概率能绕过基础的浏览器检测。

修改后的代码示例:

import requests

# 模拟Chrome浏览器的完整请求头
headers = {
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.47 Safari/537.36',
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8',
    'Accept-Language': 'en-US,en;q=0.5',
    'Referer': 'https://sky.lea.moe/',
    'Accept-Encoding': 'gzip, deflate, br',
    'Connection': 'keep-alive',
    'Upgrade-Insecure-Requests': '1'
}

# 使用Session保持会话,自动处理Cookie
session = requests.Session()
page = session.get("https://sky.lea.moe/stats/PapaGordsmack/", headers=headers)
html_contents = page.text
print(html_contents)

2. 使用浏览器自动化工具(应对JS动态渲染)

如果网站的核心内容是通过JavaScript动态生成的,requests这类纯HTTP请求库就无法获取到最终的页面内容。这时候需要用Selenium或Playwright这类工具模拟真实浏览器的行为,它们会自动执行页面中的JS,获取和浏览器一致的渲染结果。

以Selenium为例,步骤如下:

  • 先安装Selenium:pip install selenium
  • 下载对应浏览器的驱动(比如ChromeDriver,要和你的Chrome版本匹配)

示例代码:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

# 配置Chrome选项,模拟正常浏览器
options = Options()
options.add_argument('user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.47 Safari/537.36')
options.add_argument('--headless=new')  # 无头模式,不弹出浏览器窗口

# 初始化浏览器驱动
driver = webdriver.Chrome(options=options)
driver.get("https://sky.lea.moe/stats/PapaGordsmack/")

# 获取渲染后的页面源码
html_contents = driver.page_source
print(html_contents)

# 关闭浏览器
driver.quit()

3. 检查重定向和Cookie状态

有些网站会通过重定向到验证页面来拦截非浏览器请求,你可以先打印请求的状态码和重定向历史,同时用requests.Session自动保存和携带Cookie——很多网站会用Cookie来标识合法会话。

比如在代码中加入以下调试代码:

print(page.status_code)
print(page.history)  # 查看重定向历史
print(session.cookies)  # 查看会话中的Cookie

通过这些信息可以判断是否是Cookie或重定向导致的拦截,再针对性调整请求策略。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 14:42:48