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

HTMLSession爬取Ask搜索结果报Pseudo-elements不支持错误

报错原因
  • 抛出Pseudo-elements are not supported错误的直接原因是:你在find()方法的CSS选择器参数中写了::text伪元素,requests-html底层依赖的cssselect库不支持解析CSS选择器中的伪元素,直接触发解析异常。
  • 终端打印200状态码说明页面请求已经成功,问题完全出在元素提取的语法写法上,和你使用的Edge浏览器、网络连通性都没有关系。
修复方法

::text不是标准CSS选择器语法,是部分爬虫框架自定义的扩展语法,在requests-html中取元素文本不需要写在选择器里:先通过标准CSS选择器匹配到目标元素,再直接调用元素对象的.text属性即可获取文本内容。
修正后的可运行代码:

from requests_html import HTMLSession

class Scraper():
    def scrapedata(self,tag):
        url = f'https://www.ask.com/web?q={tag}'
        s = HTMLSession()
        r = s.get(url)
        print(r.status_code)

        qlist = []

        ask = r.html.find('div.PartialSearchResults-item')

        for a in ask:
            # 移除选择器中的::text,匹配到元素后直接取text属性
            title_link = a.find('a.PartialSearchResults-item-title-link.result-link', first=True)
            # 增加非空判断,避免个别结果结构异常触发空值报错
            if title_link:
                title = title_link.text.strip()
                print(title)
                qlist.append(title)
        return qlist


if __name__ == "__main__":
    ask = Scraper()
    ask.scrapedata('ferrari')
补充提示
  • 如果需要提取元素属性(比如搜索结果的跳转链接),同样不需要伪元素,匹配到元素后通过.attrs['属性名']获取即可,例如取链接就写title_link.attrs['href']。
  • 如果后续遇到动态加载的内容拿不到的情况,可以调用r.html.render()用内置的浏览器内核渲染页面后再提取元素。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 17:39:18