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

使用BeautifulSoup爬取时如何匹配_ngcontent-c0属性元素

问题根源

_ngcontent-c0不是类名,也不是标签名的组成部分,是Angular框架编译时自动给元素注入的动态属性,这类带c+数字后缀的属性值会随前端版本迭代随机变化,完全不适合作为元素定位依据。
另外你用requests直接请求拿到的只是服务器返回的初始静态HTML,Angular渲染的页面内容需要浏览器执行客户端JS后才会挂载到DOM上,初始源码里根本不存在你要找的故事条目,这也是你匹配不到目标内容的核心原因。
你写的选择器本身也存在语法错误:span__ngcontent-c0会让BeautifulSoup去查找名为span__ngcontent-c0的自定义标签,这类标签在页面中不存在,自然拿不到结果。

解决方案
  • 优先调用页面背后的结构化数据接口,稳定性最高、解析成本最低
    打开目标页面后按F12调出开发者工具,切换到网络面板,筛选Fetch/XHR类型请求,刷新页面就能找到页面加载时拉取故事列表的接口,接口返回的是标准JSON格式数据,标题、发布日期、所属国家都是已经结构化好的字段,不需要解析HTML,直接遍历提取即可,示例代码逻辑如下:
    import requests
    import csv
    
    # 从浏览器网络面板抓到的故事列表数据接口
    api_url = "对应接口地址"
    resp = requests.get(api_url)
    story_list = resp.json()
    # 遍历提取字段写入csv即可
    for story in story_list["items"]:
        title = story["title"]
        pub_date = story["publication_date"]
        country = story["country_tag"]
    
  • 如果选择解析HTML方案,不要使用动态生成的_ngcontent-*属性做定位依据
    优先选择元素上固定的class属性、id属性,或者稳定的父级容器结构逐层向下查找目标元素。如果静态HTML里找不到目标内容,说明内容由JS动态渲染,可以换用Playwright、Selenium这类工具模拟浏览器加载完所有JS、完成DOM渲染后再做解析。
避坑提示

所有Angular自动生成的_ngcontent-*、_nghost-*属性都不要用作爬取定位规则,这类属性是框架编译生成的哈希标识,网站每次更新前端代码,属性名、属性值都可能发生变化,写好的规则会快速失效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 09:06:21