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

Python Selenium爬虫检测div标签data-asin空值及嵌套属性值的方法

Selenium + BeautifulSoup 提取有效data-asin属性实现方案

前置步骤:获取可解析的页面源码

首先用Selenium加载目标页面,拿到完整渲染后的HTML内容,初始化BeautifulSoup对象:

from bs4 import BeautifulSoup
from selenium import webdriver

# 初始化浏览器驱动
driver = webdriver.Chrome()
driver.get("目标爬取页面URL")
# 可选:设置隐式等待,避免页面未完全加载就抓取
driver.implicitly_wait(10)

# 生成BeautifulSoup解析对象
soup = BeautifulSoup(driver.page_source, "html.parser")
driver.quit()

核心提取逻辑

你提供的HTML特征里,所有需要校验的外层节点统一具备data-cel-widget属性以search_result_开头、带data-index属性的特征,先批量选出这类顶层节点,再按两层逻辑处理:

  • 先读取外层div的data-asin属性,若非空直接记录
  • 若外层data-asin为空,自动遍历该节点下所有嵌套层级,提取所有非空的data-asin属性值
# 批量选中所有待校验的顶层div节点
top_result_divs = soup.select('div[data-cel-widget^="search_result_"]')
valid_asin = []

for div in top_result_divs:
    # 读取外层div的data-asin属性
    outer_asin = div.get("data-asin")
    # 外层属性非空则直接记录,无需遍历子元素
    if outer_asin and outer_asin.strip():
        valid_asin.append(outer_asin)
        continue
    # 外层属性为空,查找当前节点下所有带data-asin属性的子元素
    child_asin_nodes = div.select('[data-asin]')
    for node in child_asin_nodes:
        child_asin = node.get("data-asin")
        # 过滤空属性值
        if child_asin and child_asin.strip():
            valid_asin.append(child_asin)

场景匹配说明

针对你给出的data-index="2"空ASIN外层节点场景:

  • 程序识别到外层data-asin为空后,会自动穿透3层嵌套结构,找到内部带data-asin="0974158216"、data-asin="1433692163"的子div
  • 不会把空的data-asin值、无data-asin属性的节点误记录

可选优化:结果去重

如果遇到重复出现的ASIN,需要去重同时保留原始遍历顺序,可增加如下逻辑:

seen = set()
unique_asin_list = []
for asin in valid_asin:
    if asin not in seen:
        seen.add(asin)
        unique_asin_list.append(asin)

实现说明

  • 不需要额外写try/except逻辑:BeautifulSoup的get()方法读取不存在的属性时会返回None,不会触发异常
  • 不需要手动写递归遍历嵌套结构:CSS选择器会自动匹配当前节点下所有层级的目标元素,不会因为HTML嵌套深度变化失效

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.23 05:15:05