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

如何成功爬取网页?请求状态码200却获无关文本而非HTML标签

请求200但未拿到HTML,返回转义JSON数据的解决方法

问题原因

Understat采用前端动态渲染机制:你用requests.get获取的是页面的初始骨架HTML,而页面展示的球员、赛事数据其实是嵌在页面的<script>标签里的转义JSON字符串——你看到的\x22就是转义后的双引号,这不是无关文本,是网站实际存储的核心数据。

解决方案

不需要用BeautifulSoup解析HTML,直接提取并解码脚本里的JSON数据即可,效率更高:

import requests
import re
import json

url = "https://understat.com/league/La_liga"
res = requests.get(url)

# 匹配存储球员数据的脚本内容
data_match = re.search(r'var playersData = JSON.parse\(\'(.*?)\'\);', res.text)

if data_match:
    # 移除转义字符,还原标准JSON格式
    json_str = data_match.group(1).replace('\\', '')
    players_data = json.loads(json_str)
    
    # 示例:打印第一个球员的详细数据
    print(players_data[0])
else:
    print("未找到目标数据")

代码说明

  • 正则表达式r'var playersData = JSON.parse\(\'(.*?)\'\);'精准定位到存储球员数据的变量,该变量通过解析转义字符串生成前端可用数据
  • 替换掉字符串中的\转义符,得到可直接解析的标准JSON字符串
  • 用json.loads将字符串转为Python可操作的列表/字典,直接提取所需字段

补充

如果确实需要渲染后的完整HTML,可以使用selenium或playwright模拟浏览器加载页面,但对于Understat这类数据驱动的网站,直接提取JSON数据是更高效、稳定的方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 16:57:00