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

如何用Python的BeautifulSoup提取data-preview中的id值?

解决方法

首先,你现有代码里存在几个关键问题:

  • 定位标签时用了错误的class名(a fancy title for this class),应该改成目标li标签的class Li FnPreviewItem
  • 你试图用find(attrs={"id":"^[-+]?[0-9]+$"})查找id,但这个id是嵌套在data-preview属性的JSON字符串里,并非li标签的独立id属性,所以这种方式完全找不到目标值。

正确的做法是先提取data-preview的属性值,再将其解析为JSON对象,直接从中取出id:

修正后的代码

import requests
from bs4 import BeautifulSoup
import json

# 注意:替换成包含目标li标签的网页URL,不是图片地址
url = "目标网页的URL"
r = requests.get(url)
soup = BeautifulSoup(r.content, 'html.parser')

# 准确定位目标li标签
li_tag = soup.find("li", class_="Li FnPreviewItem")
if li_tag:
    # 获取data-preview属性的JSON字符串
    data_preview_str = li_tag.get("data-preview")
    # 解析JSON字符串为Python字典
    preview_data = json.loads(data_preview_str)
    # 提取id值
    target_id = preview_data.get("id")
    print(target_id)  # 输出结果:288857982
else:
    print("未找到目标li标签")

步骤说明

  1. 定位标签:使用find("li", class_="Li FnPreviewItem")精准匹配目标li元素,class_是BeautifulSoup为避免和Python关键字冲突,专门用于匹配class属性的参数。
  2. 获取属性值:通过get("data-preview")提取该标签的data-preview属性内容,这是一段标准的JSON格式字符串。
  3. 解析JSON:用json.loads()将JSON字符串转换为Python字典,就能像操作普通字典一样提取键值对。
  4. 提取id:用字典的get("id")方法获取目标id,这种方式比直接索引更安全,能避免因键不存在而抛出异常。

另外,你之前代码里的url写的是图片地址,这是错误的——必须替换成包含目标li标签的网页URL,否则请求返回的是图片二进制数据,BeautifulSoup无法解析HTML结构。

内容的提问来源于stack exchange,提问作者a.perez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 08:22:17