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

使用requests_html爬取时<aside>标签返回None,是标签限制还是代码问题?

问题分析与解决办法

可能原因

  1. XPath路径不匹配:你编写的//*[@id="scrolldiv"]/main/div/aside可能和页面实际DOM结构不符,比如aside并非直接作为目标div的子元素存在,或者页面渲染后元素层级发生了变化。
  2. 动态加载未完成:aside内的赛事数据可能依赖额外AJAX请求加载,sleep=1的等待时间不足以让JS完成内容渲染。
  3. 无头浏览器检测限制:网站可能识别出requests_html使用的无头Chromium环境,限制了特定区域的元素渲染。

解决步骤

1. 验证并修正XPath

打开目标网页按F12进入开发者工具:

  • 找到目标aside元素,右键选择「复制」→「复制完整XPath」
  • 将复制的正确路径替换代码中的XPath,比如实际路径可能是//*[@id="scrolldiv"]/main/div/div/aside(需根据页面真实结构调整)

2. 优化渲染参数触发内容加载

延长等待时间并模拟页面滚动,确保动态内容加载完成:

from requests_html import HTMLSession

url = "https://tulospalvelu.palloliitto.fi/location/598/fixtures"

s = HTMLSession()
r = s.get(url)

# 延长等待时间+模拟滚动到底部触发加载
r.html.render(sleep=3, script="window.scrollTo(0, document.body.scrollHeight);")

# 替换为验证后的XPath
fixtures = r.html.xpath('//*[@id="scrolldiv"]/main/div/div/aside', first=True)

print(fixtures)

3. 直接抓取数据接口(更高效)

打开浏览器网络面板(F12→Network),刷新页面后筛选「XHR/Fetch」请求,找到返回赛事数据的JSON接口,直接请求接口获取数据:

import requests

# 替换为实际找到的API接口URL
api_url = "https://tulospalvelu.palloliitto.fi/api/location/598/fixtures"
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"
}

response = requests.get(api_url, headers=headers)
data = response.json()
print(data)

4. 模拟普通浏览器绕过检测

给render方法添加真实浏览器的User-Agent,避免被无头浏览器检测拦截:

r.html.render(
    sleep=3,
    user_agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 02:43:10