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

requests-html调用find('#about')获取元素内容超出预期如何解决?

问题原因

你遇到的是 requests-html 0.10.0版本的已知缺陷:当你查找的元素带有aria-haspopup="true"属性时,库内部的文本提取逻辑会出现边界判断错误,不会在该元素闭合标签处停止提取,而是持续读取到整个HTML文档的末尾,就出现了你现在拿到多余全部页面内容的情况。

解决方案

有三种可落地的修复方案,按优先级推荐:

  • 方案1:降级到无该bug的0.9.0版本
    直接执行pip命令卸载现有版本重装旧版即可:
    pip uninstall requests-html
    pip install requests-html==0.9.0
    
    重装完成后再运行你原来的代码就能得到预期输出。
  • 方案2:不降级版本,修改提取逻辑,先拿子节点再取文本
    如果你需要保留0.10.0版本的其他功能,可以直接指定提取#about元素下的直接子<a>和子<ul>的文本,规避bug:
    from requests_html import HTMLSession
    session = HTMLSession()
    r = session.get('https://python.org/')
    about = r.html.find('#about', first=True)
    # 单独提取a标签文本加子ul的文本
    a_text = about.find('a', first=True).text
    ul_text = about.find('ul.subnav', first=True).text
    print(f"{a_text}\n{ul_text}")
    
  • 方案3:改用CSS选择器精确匹配文本所属节点,跳过带问题的父元素直接取内容
    直接定位#about下的所有可展示文本节点,不用父元素的text属性:
    items = r.html.find('#about li, #about > a')
    print('\n'.join([i.text for i in items]))
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 11:45:02