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

学习BS4爬虫:如何提取链接锚点中ctdata字典内容?

你的代码之所以输出一堆None,是因为找错了对象——offers.find('ctdata')是在寻找名为<ctdata>的子标签,但实际上ctdata是<a>标签的属性,不是独立的HTML标签,所以肯定找不到内容~

下面是正确的处理步骤和代码:

核心思路

  1. 先从<a>标签上直接获取ctdata属性的字符串值
  2. 把这个字符串形式的字典转换成Python可操作的字典对象
  3. 从字典里提取你需要的字段(比如ad_jobtitle)

完整代码示例

import json
from bs4 import BeautifulSoup

# 替换成你的实际HTML内容
html_content = '''
<a ct="result_offer_content" ctdata = {"ad_id_solr": "1a7d243c3610c62012159b7c9d4e900382bbe446", "ad_id_mongo": "", "ad_segment_id": 1723, "ad_partner": "wizbii.com_premium", "ad_sector": "Ingénierie", "ad_subsector": "", "ad_jobtitle": "Ingénieur développeur", "ad_company": "SII", "ad_type": "exact", "ad_position": 1, "ad_locality": "Bordeaux"}>
'''

soup = BeautifulSoup(html_content, 'html.parser')

for offer in soup.find_all("a", {'ct':'result_offer_content'}):
    # 获取ctdata属性值,get方法避免属性不存在时报错
    ctdata_raw = offer.get('ctdata')
    if ctdata_raw:
        # 将字符串字典转为Python字典
        ctdata_dict = json.loads(ctdata_raw)
        # 提取目标字段,同样用get方法更安全
        job_title = ctdata_dict.get('ad_jobtitle')
        print(job_title)

注意事项

  • 必须导入json模块,因为要把字符串格式的字典解析成Python可操作的字典
  • 用get()方法获取属性和字典字段比直接用索引(比如offer['ctdata'])更安全,遇到属性/字段不存在的情况会返回None而不是直接报错
  • 如果遇到ctdata里用单引号包裹的情况,需要先把单引号替换成双引号再解析:ctdata_raw = ctdata_raw.replace("'", '"'),你的示例里是双引号,所以不需要这一步

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 03:46:00