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

使用Python的requests_html爬取动态网站遇AsyncHTMLSession属性错误

解决AsyncHTMLSession爬取SEC动态页面的AttributeError问题

问题根源

session.get(url)是异步方法,直接赋值给response得到的是异步任务对象(_asyncio.Future),不是实际的响应对象,所以根本没有html属性。必须用await等待这个异步请求完成,才能拿到带html属性的响应实例。

修正后的可运行代码

import asyncio
from requests_html import AsyncHTMLSession

async def crawl_sec_report():
    url = "https://www.sec.gov/ix?doc=/Archives/edgar/data/0000789019/000095017023035122/msft-20230630.htm"
    # 加浏览器请求头,绕SEC的反爬拦截
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36'
    }
    session = AsyncHTMLSession()
    # 核心:await session.get()才能拿到真正的响应
    response = await session.get(url, headers=headers)
    # 等待JS渲染页面,sleep参数给足时间加载动态内容
    await response.html.arender(sleep=3)
    # 输出结果
    print(response.html)
    print(response.html.html)
    # 关闭会话
    await session.close()

# 启动异步函数
asyncio.run(crawl_sec_report())

必看注意点

  • 所有异步操作(session.get()、arender()、session.close())都必须加await,不然会直接返回任务对象而非结果
  • SEC官网反爬严格,必须加User-Agent,否则大概率返回403禁止访问
  • 如果页面加载慢,把arender()里的sleep调大(比如sleep=5),确保动态内容完全渲染

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 23:35:08