如何成功爬取网页?请求状态码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
相关产品推荐
相关产品推荐

