如何使用requests抓取动态网页中的电竞参与者名称?
老哥,你的问题我太熟了——动态页面用静态请求抓不到内容简直是爬虫入门的经典坑。你之前的BeautifulSoup代码没效果,核心原因就是那些.gll-MarketGroup_Wrapper元素是页面加载完成后,通过JavaScript动态渲染出来的,根本不在requests.get拿到的初始HTML源码里。
给你两个最实用的解决方案,按步骤来就能搞定:
解决方案1:直接调用网站的公开API
这是效率最高的方式,因为动态页面的内容几乎都是通过API接口拉取的。操作步骤如下:
- 打开目标页面,按F12打开开发者工具,切换到Network面板后刷新页面
- 在面板的筛选器里选择XHR或Fetch,重点找URL里带
esports、match、participant这类关键词的请求,看哪些返回的是JSON格式数据 - 找到对应请求后,复制它的URL、完整请求头(尤其是
User-Agent、Referer,部分API会校验这些字段),用requests直接请求这个接口
代码示例:
import requests import json # 替换成你找到的API接口URL api_url = "https://example.com/api/esports/participants" headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36", "Referer": "你的目标页面URL" # 有些API会校验来源,加上更稳妥 } response = requests.get(api_url, headers=headers) data = response.json() # 从JSON数据里提取参与者名称,具体路径需要根据返回的结构调整 # 举个示例,假设数据嵌套在data['matches'][0]['participants']里 for match in data.get('matches', []): for participant in match.get('participants', []): print(participant.get('name'))
解决方案2:提取页面script标签里的预加载数据
如果找不到明确的API接口,很多网站会把初始渲染需要的数据塞在页面的<script>标签里(比如window.__INITIAL_STATE__这类全局变量)。操作步骤如下:
- 用
requests拿到页面的初始HTML - 用BeautifulSoup定位到包含动态数据的script标签
- 提取标签内的内容,去掉JS变量声明部分,转成JSON格式处理
代码示例:
import requests from bs4 import BeautifulSoup import json url = "你的目标页面URL" headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36"} res = requests.get(url, headers=headers) soup = BeautifulSoup(res.text, 'lxml') # 找包含初始数据的script标签,不同网站的标识不同,比如常见的__NEXT_DATA__ script_tag = soup.find('script', id='__NEXT_DATA__') if script_tag: raw_data = script_tag.string # 如果是类似window.__INITIAL_STATE__ = {...}的格式,需要先截取JSON部分 # 比如:raw_data = raw_data.replace('window.__INITIAL_STATE__ = ', '').rstrip(';') data = json.loads(raw_data) # 从JSON结构里定位参与者名称,路径需要根据实际数据调整 participants = data.get('props', {}).get('pageProps', {}).get('esportsData', {}).get('participants', []) for p in participants: print(p.get('name'))
额外提示
- 不管用哪种方法,都要通过开发者工具的Response或Preview面板仔细分析返回的数据结构,找到参与者名称的具体嵌套路径
- 如果遇到403/401错误,把浏览器里该请求的完整请求头(包括
Cookie、Authorization等)复制过来,不过要注意Cookie可能会过期
内容的提问来源于stack exchange,提问作者robots.txt




