如何抓取积分榜页面中静态源码未展示的球队名称及href链接
动态页面数据抓取解决方案
问题原因
你要抓取的页面数据属于客户端动态渲染内容,服务器返回的初始HTML仅包含页面基础框架,积分榜数据是页面加载完成后通过异步AJAX请求拉取,再由JS渲染到页面DOM中的,所以直接查看初始源代码看不到对应数据。
可行实现方案
方案1:无头浏览器模拟页面渲染
用支持JS执行的无头浏览器工具模拟正常用户访问,等页面完全渲染后再提取DOM中的球队名和链接属性,适配几乎所有动态页面场景,不需要额外分析接口逻辑。
常用工具包括Python生态的Selenium、Playwright、Pyppeteer,Node.js生态的Puppeteer等。
示例代码(Python + Playwright):from playwright.sync_api import sync_playwright TARGET_URL = "http://arsiv.mackolik.com/Standings/Default.aspx?sId=57488" with sync_playwright() as p: # 启动无头模式的Chromium浏览器 browser = p.chromium.launch(headless=True) page = browser.new_page() page.goto(TARGET_URL) # 等待积分榜表格加载完成,选择器可通过F12开发者工具自行调整 page.wait_for_selector("table tbody tr td a[href*='/Team/']") # 提取所有球队的名称和对应链接 team_elements = page.locator("td a[href*='/Team/']").all() for elem in team_elements: team_name = elem.inner_text().strip() team_href = elem.get_attribute("href").strip() print(f"球队名:{team_name},链接:{team_href}") browser.close()方案2:抓包分析异步接口直接请求数据
该方案性能更高,不需要加载页面静态资源和执行渲染逻辑,直接拿到结构化数据。
操作步骤:- 打开目标页面,按F12调出开发者工具,切换到「网络」标签,选择「XHR/ Fetch」过滤器
- 刷新页面,逐个查看请求的响应内容,找到包含球队名称、积分信息的异步请求
- 记录该请求的请求方法、请求头、参数,用
requests、axios等HTTP请求工具直接模拟请求即可
方案3:轻量JS渲染工具
如果不想用重型的无头浏览器,可以选requests-html这类内置了JS渲染能力的HTTP请求库,比完整无头浏览器资源占用更低,也可以直接获取渲染后的页面内容。
注意:抓取数据请遵守目标网站的robots协议及相关法律法规,控制请求频率避免对目标服务器造成不必要的压力。
内容的提问来源于stack exchange,提问作者Cnotmaster88
相关产品推荐
相关产品推荐

