如何区分解析亚马逊网站产品搜索结果页HTM代码中广告位( Sponsored)和自然位的产品ASIN及排名

本文主要是介绍如何区分解析亚马逊网站产品搜索结果页HTM代码中广告位( Sponsored)和自然位的产品ASIN及排名,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在开发亚马逊产品广告排名插件的时候需要通过页面HTML代码分别找出属于广告位和自然搜索结果的产品ASIN及排名,所以需要找到区分广告位和自然搜索结果的HTML代码属性:

所有搜索结果页的产品不管是广告位还是自然位,都包括在

标签里,每个div标签里都有这个属性:

<div data-asin="B0CW1LTMHB" data-index="11">

data-asin属性为产品ASIN, data-index属性为产品的位置排名。可以用JavaScript脚本获取:

let asin = div.getAttribute('data-asin');
let index = div.getAttribute('data-index')

要获取页面里面所有产品的ASIN和index,可以用下列JavaScript代码获取:

const divs = document.querySelectorAll('div[data-asin]');let asinData = [];divs.forEach(div => {let asin = div.getAttribute('data-asin');let index = div.getAttribute('data-index') || '';asinData.push({ asin, index });

经对比广告位和自然的div标签内的HTML代码,发现每个广告位商品(出品牌广告位除外)都包括一个sponsored标签,内容如下:

<span class="a-color-base">Sponsored</span>

则可以通过查找这个div的文本内容是否包括Sponsored这个词来判断:

let isSponsored = div.innerText.includes('Sponsored')

最后包括了全部asin及index排名和是否为广告产品的数据的这个代码函数如下:

function extractDataAsin() {let asinElements = document.querySelectorAll('div[data-asin]');let asinValues = [];asinElements.forEach(div => {let asin = div.getAttribute('data-asin');let index = div.getAttribute('data-index') || '';let isSponsored = div.innerText.includes('Sponsored');if (asin) {asinValues.push({ asin: asin, index: index,isSponsored:isSponsored })}; //如果asin不等于空值});console.log('执行了asin提取函数:',asinValues);fetch('http://127.0.0.1:5000/json', {method: 'POST',headers: {'Content-Type': 'application/json'},body: JSON.stringify({ asins: asinValues })})return asinValues;
}

程序运行后会得到类似下面的数据:

{"asin":"B09JYJHKD7","index":"","isSponsored":false},{"asin":"B09HVCYRRS","index":"","isSponsored":false},{"asin":"B09HL9V474","index":"","isSponsored":false},{"asin":"B0BMGYT38K","index":"3","isSponsored":true},{"asin":"B0BMGYWVSH","index":"4","isSponsored":true},

如下截图:
在这里插入图片描述
isSponsored为true的ASIN就是搜索结果广告产品。细心观察有的ASIN的index值为空,发现是还有一种广告类型是:4 stars and above下面的产品,类似这样:
在这里插入图片描述
这种广告位属于轮播图(carousel),几个产品共用一个位置,单独的ASIN是没有index属性。仔细看这个ASIN产品的HTML代码,是类似这样的:
在这里插入图片描述
产品asin在轮播图里的位置是这个属性确定:

aria-posinset=“2”

这里的2就是产品B00W2W4HXU在轮播图里的位置,即第2个。这个aria-posinset在data-asin所在div标签的父级标签

  • 里。
  • 可以通过这样的方法获得父级li里aria-posinset的属性值:

    const asin = 'B0BMGYT38K';
    document.querySelector(`div[data-asin="${asin}"]`).closest('li.a-carousel-card').getAttribute('aria-posinset');
    

    当然,最简单的方法就是看index为空的asin在整个数组里的排名就可以了,前3名是品牌广告,最后几名是轮播,而且轮播的几个asin也是挨着,有前后排名。

这篇关于如何区分解析亚马逊网站产品搜索结果页HTM代码中广告位( Sponsored)和自然位的产品ASIN及排名的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1022938

相关文章

python实现pdf转word和excel的示例代码

《python实现pdf转word和excel的示例代码》本文主要介绍了python实现pdf转word和excel的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录一、引言二、python编程1,PDF转Word2,PDF转Excel三、前端页面效果展示总结一

在MyBatis的XML映射文件中<trim>元素所有场景下的完整使用示例代码

《在MyBatis的XML映射文件中<trim>元素所有场景下的完整使用示例代码》在MyBatis的XML映射文件中,trim元素用于动态添加SQL语句的一部分,处理前缀、后缀及多余的逗号或连接符,示... 在MyBATis的XML映射文件中,<trim>元素用于动态地添加SQL语句的一部分,例如SET或W

使用C#代码计算数学表达式实例

《使用C#代码计算数学表达式实例》这段文字主要讲述了如何使用C#语言来计算数学表达式,该程序通过使用Dictionary保存变量,定义了运算符优先级,并实现了EvaluateExpression方法来... 目录C#代码计算数学表达式该方法很长,因此我将分段描述下面的代码片段显示了下一步以下代码显示该方法如

python多进程实现数据共享的示例代码

《python多进程实现数据共享的示例代码》本文介绍了Python中多进程实现数据共享的方法,包括使用multiprocessing模块和manager模块这两种方法,具有一定的参考价值,感兴趣的可以... 目录背景进程、进程创建进程间通信 进程间共享数据共享list实践背景 安卓ui自动化框架,使用的是

使用Python实现批量访问URL并解析XML响应功能

《使用Python实现批量访问URL并解析XML响应功能》在现代Web开发和数据抓取中,批量访问URL并解析响应内容是一个常见的需求,本文将详细介绍如何使用Python实现批量访问URL并解析XML响... 目录引言1. 背景与需求2. 工具方法实现2.1 单URL访问与解析代码实现代码说明2.2 示例调用

SSID究竟是什么? WiFi网络名称及工作方式解析

《SSID究竟是什么?WiFi网络名称及工作方式解析》SID可以看作是无线网络的名称,类似于有线网络中的网络名称或者路由器的名称,在无线网络中,设备通过SSID来识别和连接到特定的无线网络... 当提到 Wi-Fi 网络时,就避不开「SSID」这个术语。简单来说,SSID 就是 Wi-Fi 网络的名称。比如

SpringBoot生成和操作PDF的代码详解

《SpringBoot生成和操作PDF的代码详解》本文主要介绍了在SpringBoot项目下,通过代码和操作步骤,详细的介绍了如何操作PDF,希望可以帮助到准备通过JAVA操作PDF的你,项目框架用的... 目录本文简介PDF文件简介代码实现PDF操作基于PDF模板生成,并下载完全基于代码生成,并保存合并P

SpringCloud配置动态更新原理解析

《SpringCloud配置动态更新原理解析》在微服务架构的浩瀚星海中,服务配置的动态更新如同魔法一般,能够让应用在不重启的情况下,实时响应配置的变更,SpringCloud作为微服务架构中的佼佼者,... 目录一、SpringBoot、Cloud配置的读取二、SpringCloud配置动态刷新三、更新@R

使用Java解析JSON数据并提取特定字段的实现步骤(以提取mailNo为例)

《使用Java解析JSON数据并提取特定字段的实现步骤(以提取mailNo为例)》在现代软件开发中,处理JSON数据是一项非常常见的任务,无论是从API接口获取数据,还是将数据存储为JSON格式,解析... 目录1. 背景介绍1.1 jsON简介1.2 实际案例2. 准备工作2.1 环境搭建2.1.1 添加

SpringBoot基于MyBatis-Plus实现Lambda Query查询的示例代码

《SpringBoot基于MyBatis-Plus实现LambdaQuery查询的示例代码》MyBatis-Plus是MyBatis的增强工具,简化了数据库操作,并提高了开发效率,它提供了多种查询方... 目录引言基础环境配置依赖配置(Maven)application.yml 配置表结构设计demo_st