当前位置: 首页 > news >正文

电商数据集成之电商商品信息采集系统架构设计||电商API接口

一、引言    

          

本架构设计文档旨在阐述基于 Selenium 的电商商品信息采集系统的整体架构,包括系统视图、逻辑视图、物理视图、开发视图和进程视图,并提供一个简单的采集电商商品信息的 demo。该系统通过模拟浏览器行为,实现对电商商品信息的自动化抓取,为数据分析、市场研究等提供数据支持。

          

京东获得JD商品详情 API 返回值说明

item_get-获得JD商品详情 

jd.item_get

公共参数

名称类型必须描述
keyString调用key(必须以GET方式拼接在URL中)
secretString调用密钥
api_nameStringAPI接口名称(包括在请求地址中)[item_search,item_get,item_search_shop等]
cacheString[yes,no]默认yes,将调用缓存的数据,速度比较快
result_typeString[json,jsonu,xml,serialize,var_export]返回数据格式,默认为json,jsonu输出的内容中文可以直接阅读
langString[cn,en,ru]翻译语言,默认cn简体中文
versionStringAPI版本

请求参数

请求参数:num_iid=10335871600

参数说明:num_iid:JD商品ID

响应参数

Version: Date:

名称类型必须示例值描述

item

item[]0获得JD商品详情

二、系统视图

          

系统视图描述了系统的整体结构和功能模块。本采集系统主要包括以下几个模块:

          

(1)多终端接入

支持微信小程序、Android、IOS、PC 网页任意一个入口。

(2)用户界面模块

负责与用户进行交互,提供采集任务配置、启动、停止等操作界面。

(3)爬虫管理模块

负责调度和管理爬虫任务,包括任务队列、任务状态监控等。  

(4)数据解析模块    

负责对采集到的网页数据进行解析,提取商品信息。

(5)数据存储模块

负责将解析后的商品信息存储到数据库或文件中。

(6)代理管理模块

负责代理服务器的获取、验证和管理。

为爬虫任务提供可用的代理 IP,确保 IP 高可用。    

监控代理服务器的状态,及时剔除不可用的代理。

          

三、逻辑视图

          

逻辑视图展示了系统内部的功能划分和模块间的交互关系,从用户视角描述系统有什么功能。本采集系统的逻辑视图如下:

          

(1)用户通过用户界面模块配置采集任务,包括目标 URL、采集深度、抓取字段等。

(2)用户界面模块将配置信息传递给爬虫管理模块,爬虫管理模块根据配置信息创建爬虫任务,并将其加入任务队列。  

(3)爬虫管理模块调度 Selenium 驱动浏览器进行网页加载和渲染,模拟用户操作进行页面滚动、点击等。

(4)Selenium 将加载完成的页面数据返回给爬虫管理模块,爬虫管理模块将页面数据传递给数据解析模块。

(5)数据解析模块使用正则表达式或 XPath 等方法对页面数据进行解析,提取出商品信息。

(6)提取的商品信息被传递给数据存储模块,数据存储模块将其存储到数据库或文件中。

(7)代理池构建

代理管理模块首先会从各种来源(如免费代理网站、付费代理服务)获取代理 IP。    

对获取的代理 IP 进行验证,确保其可用性和匿名性。

将验证通过的代理 IP 存入代理池,供爬虫任务使用。

(8)代理调度

当爬虫任务启动时,代理管理模块会从代理池中选取一个可用的代理 IP。

将选取的代理 IP 配置到 Selenium WebDriver中,确保爬虫任务通过该代理进行网页请求。

监控代理 IP 的使用情况,如请求次数、响应时间等,以便及时更换。

          

(9)代理维护

          

定期对代理池中的代理 IP 进行验证,剔除不可用的代理。    

根据代理 IP 的使用情况,动态调整代理池的权重,优先使用性能更好的代理。

当代理池中的可用代理数量低于阈值时,自动从来源处获取新的代理 IP 进行补充。

          

四、物理视图

          

物理视图描述了系统在实际环境中的部署情况,包括硬件、网络、软件等资源的配置。本采集系统的物理视图如下:

          

采用微服务架构,分布式部署,每个服务都实现容器化,整个微服务集群部署在 K8S 集群上,可以扩展支持多云部署。    

图片

五、开发视图

          

开发视图展示了系统的代码结构和开发过程中的模块划分。本采集系统的开发视图如下:

          

整体采用微服务架构,容器化部署。

系统采用多语言开发,包括 Java、Python 语言进行开发,利用 Selenium 库模拟浏览器行为,进行网页数据的抓取。

系统代码分为多个模块和函数,每个模块和函数负责特定的功能,实现代码的高内聚和低耦合。

代码使用版本控制工具(如Git)进行管理,确保代码的可追溯性和可维护性。

              

图片

          

六、进程视图

          

系统启动后,主进程负责初始化系统环境和加载配置信息。

根据配置信息,主进程创建爬虫任务,并启动子进程执行爬虫任务。

每个爬虫任务对应一个子进程,子进程使用 Selenium 驱动浏览器进行网页加载和渲染,模拟用户操作进行页面抓取。

子进程将抓取到的页面数据传递给主进程进行解析和存储。

主进程负责监控子进程的运行状态,确保任务的正常执行。

              

图片

          

七、Demo 示例

          

下面是一个简单的基于 Selenium 的电商商品信息采集 demo,用于演示系统的基本功能。

from selenium import webdriver                    
from selenium.webdriver.common.by import By                    
from selenium.webdriver.support.ui import WebDriverWait                    
from selenium.webdriver.support import expected_conditions as EC                    
                    
def fetch_product_info(url, driver_path):                    
    # 设置Firefox驱动路径                  
    print(driver_path)                    
    driver = webdriver.Firefox(executable_path=driver_path)                    
                 
                        
    try:                    
        driver.get(url)                    
                            
        d = {}                  
                            
        # 尝试查找商品标题                  
        #title = driver.find_element(By.CSS_SELECTOR, '#J_Title').text                    
        title = WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.XPATH, '//*[@id="1081181309095"]/div/div/div[1]/div[2]')))                    
        print(f"商品标题: {title}")                    
        d['title'] = title.text                  
                            
        # 尝试查找商品价格                  
                          
        price = WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.XPATH, '//*[@id="1081181309582"]/div/div/div[2]/div/div[2]/div[1]/div[1]/span[2]')))                  
        print(f"商品价格: {price}")                    
        d['price'] = price.text                  
                            
        volume = WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.XPATH, '//*[@id="1081181309095"]/div/div/div[3]/div[1]/div[3]/span[2]')))                  
        d['volume'] = volume.text                  
                 
        for key, value in d.items():                    
            print(key, value)                  
                            
    except Exception as e:                    
        print(f"发生错误: {e}")                    
    finally:                    
        # 关闭浏览器窗口                    
        driver.quit()                    
                    
# 使用示例                  
fetch_product_info("https://detail.1688.com/offer/760030959718.html?spm=a360g.21173732.0.0.5f62410cJR8kXo", 'geckodriver.exe')        

代码运行后:

图片

我们成功获取到了需要提取的内容:    

title 跨境热销水波纹投影灯动态北极光卧室星空梦幻音乐户外露

price ¥60.00~¥130.00

volume 80+

          

我们可以查看一下待爬取的网页:

图片

相关文章:

电商数据集成之电商商品信息采集系统架构设计||电商API接口

一、引言 本架构设计文档旨在阐述基于 Selenium 的电商商品信息采集系统的整体架构,包括系统视图、逻辑视图、物理视图、开发视图和进程视图,并提供一个简单的采集电商商品信息的 demo。该系统通过模拟浏览器行为,实现对电商商品信息的自…...

Spring Cloud Stream 实现统一消息通信平台

1. 概述 Spring Cloud Stream:是Spring提供的消息通信框架,旨在构建跨不同消息中间件的统一通信平台。目的:通过消息通信机制降低分布式系统中服务间的耦合度,实现异步服务交互。 2. 消息通信与RPC RPC:远程过程调用…...

uniapp安卓plus原生选择系统文件

uniapp安卓plus原生选择系统文件 效果&#xff1a; 组件代码&#xff1a; <template xlang"wxml" minapp"mpvue"><view></view> </template> <script>export default {name: file-manager,props: {},data() {return {is…...

Go语言 Import导入

本文主要介绍Go语言import导入使用时注意事项和功能实现示例。 目录 Import 创建功能文件夹 加法 减法 主函数 优化导入的包名 .引入方法 总结 Import 创建功能文件夹 做一个计算器来演示&#xff0c;首先创建test文件夹。 加法 在test文件夹中创建add文件夹&#xff…...

一款异次元小清新风格的响应式wordpress个人博客主题

一款异次元小清新风格的响应式个人博客主题。这是一款专注于用户阅读体验的响应式 WordPress 主题&#xff0c;整体布局简洁大方&#xff0c;针对资源加载进行了优化。 Kratos主题基于Bootstrap和Font Awesome的WordPress一个干净&#xff0c;简单且响应迅速的博客主题&#x…...

【cocos creator】ts中export的模块管理

在 TypeScript&#xff08;TS&#xff09;中&#xff0c;export 和 import 的概念与 Java 中的 public 类、接口以及 import 语句有一些相似之处。可以用以下方式来类比理解&#xff1a; Export 在 TypeScript 中&#xff0c;export 用于将模块中的变量、函数、类等暴露给外部…...

QT JSON使用实例

下面是一个使用Qt框架的示例代码&#xff0c;展示如何获取仪器的状态&#xff0c;将其打包成JSON格式&#xff0c;保存到当前目录下的JSON文件中&#xff0c;然后通过FTP发送该文件。 1. 准备工作 确保你已经安装了Qt&#xff0c;并创建一个新的Qt Console项目或Qt Widgets项目…...

浅聊 Three.js 屏幕空间反射SSR-SSRShader

浅聊 Three.js 屏幕空间反射SSR(2)-SSRShader 前置基础 渲染管线中的相机和屏幕示意图 -Z (相机朝向的方向)||| -------------- <- 屏幕/投影平面| | || | || | (f) | <- 焦距| | ||…...

Windows图形界面(GUI)-DLG-C/C++ - 月历控件(MonthCalendar)

公开视频 -> 链接点击跳转公开课程博客首页 -> e​​​​​​链接点击跳转博客主页 目录 月历控件(MonthCalendar) 使用场景 控件操作 月历控件(MonthCalendar) 使用场景 日程安排&#xff1a;用户可以通过月历控件选择特定的日期来安排会议或活动。事件管理&#x…...

【Langchain大语言模型开发教程】基于文档问答

&#x1f517; LangChain for LLM Application Development - DeepLearning.AI Embedding&#xff1a; https://huggingface.co/BAAI/bge-large-en-v1.5/tree/main 学习目标 1、Embedding and Vector Store 2、RetrievalQA 引包、加载环境变量 import osfrom dotenv import…...

大厂面试-基本功

大厂面试第4季 服务可用性多少个9是什么意思遍历集合add或remove操作bughashcode冲突案例BigdecimalList去重复IDEA Debugger测试框架ThreaLocal父子线程数据同步 InheritableThreadLocal完美解决线程数据同步方案 TransmittableThreadLocal 服务可用性多少个9是什么意思 遍历集…...

RV1103使用rtsp和opencv推流视频到网页端

参考&#xff1a; Luckfox-Pico/Luckfox-Pico-RV1103/Luckfox-Pico-pinout/CSI-Camera Luckfox-Pico/RKMPI-example Luckfox-Pico/RKMPI-example 下载源码 其中源码位置&#xff1a;https://github.com/luckfox-eng29/luckfox_pico_rtsp_opencv 使用git clone由于项目比较大&am…...

与Bug较量:Codigger之软件项目体检Software Project HealthCheck来帮忙

在软件工程师的世界里&#xff0c;与 Java 小程序中的 Bug 作战是一场永不停歇的战役。每一个隐藏在代码深处的 Bug 都像是一个狡猾的敌人&#xff0c;时刻准备着给我们的项目带来麻烦。 最近&#xff0c;我就陷入了这样一场与 Java 小程序 Bug 的激烈较量中。这个小程序原本应…...

Git --- Branch Diverged

Git --- Branch Diverged Branch Diverged是如何形成的如何解决RebaseMerge Branch Diverged是如何形成的 尝试提交并将更改推送到 master 分支时&#xff0c;是否看到这条烦人的消息 原因是&#xff1a; 直到更改 B 之前&#xff0c;我的分支和“origin/master”完全相同。从…...

go标准库---net/http服务端

1、http简单使用 go的http标准库非常强大&#xff0c;调用了两个函数就能够实现一个简单的http服务&#xff1a; func HandleFunc(pattern string, handler func(ResponseWriter, *Request)) func ListenAndServe(addr string, handler Handler) error handleFunc注册一个路…...

Linux文件和目录常用命令

1.操作命令 查看目录内容 ls 切换目录 cd 创建和删除操作 touch rm mkdir 拷贝和移动文件 cp mv 查看文件内容 cat more grep 其他 echo 重定向 > 和 >> 管道 | 1.1 终端实用技巧 1>自动补全 在敲出 文件/目录/命令 的前几个字母之后&#xff0c;按下…...

【C++刷题】优选算法——链表

链表常用技巧和操作总结 常用技巧 画图 引入虚拟头节点 不要吝啬空间&#xff0c;大胆定义变量 快慢双指针常用操作 创建一个新节点 尾插 头插 两数相加 ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {int carry 0;ListNode* newHead new ListNode, *cur newHea…...

Flex和Bison

Flex和Bison是Linux和Unix环境下两个非常强大的工具&#xff0c;分别用于生成词法分析器和语法分析器。它们在编译器设计、文本处理等领域有着广泛的应用。下面我将详细介绍Flex和Bison的基本概念、功能、用法以及它们之间的关系。 一、Flex 1. 基本概念 Flex&#xff08;其…...

Matlab-FPGA 小数转换为定点二进制小数脚本和转coe文件格式脚本

Matlab-FPGA 小数转换为定点二进制小数脚本&#xff1a; % 更新于2023年6月17日&#xff0c;修改旋转因子文件&#xff0c;不修改fpga %首先明确我们的二维FFT的数组维数,此为1024*8的二维矩阵&#xff0c;1024行&#xff0c;8列 column 1024; row 8; nk[]; Ncolumn*row; fo…...

逆向案例二十三——请求头参数加密,某区块链交易逆向

网址&#xff1a;aHR0cHM6Ly93d3cub2tsaW5rLmNvbS96aC1oYW5zL2J0Yy90eC1saXN0L3BhZ2UvNAo 抓包分析&#xff0c;发现请求头有X-Apikey参数加密&#xff0c;其他表单和返回内容没有加密。 直接搜索关键字&#xff0c;X-Apikey&#xff0c;找到疑似加密位置&#xff0c;注意这里…...

AnythingtoRealCharacters2511应用案例:为小说角色生成真人参考形象

AnythingtoRealCharacters2511应用案例&#xff1a;为小说角色生成真人参考形象 1. 引言&#xff1a;从动漫到真人的魔法转换 想象一下&#xff0c;当你阅读一本精彩的小说时&#xff0c;脑海中浮现的角色形象突然变得栩栩如生。这正是AnythingtoRealCharacters2511能够实现的…...

网页在线编辑 Office 实现|软航控件集成入门实战①

在 OA、ERP、管理系统开发中&#xff0c;网页在线编辑 Office、在线预览 Word/Excel/PPT/PDF是高频刚需。自己从零开发兼容性差、周期长&#xff0c;集成成熟控件是最快、最稳的方案。本文以软航 Office 文档控件为例&#xff0c;从零到一教你完成 Windows 端集成&#xff0c;新…...

项目管理工具怎么选?8款主流产品测评与选型建议

项目管理工具怎么选&#xff1f;真正需要比较的&#xff0c;不只是功能多少&#xff0c;而是它是否适合团队的协作方式、项目复杂度和管理阶段。本文围绕场景匹配、流程灵活性、信息沉淀、管理视图和落地成本&#xff0c;对8款主流项目管理工具做一轮顾问式测评。引言很多企业在…...

二分查找/二分答案

0.前言二分算法&#xff08;Binary Search&#xff09;&#xff0c;也叫折半查找&#xff0c;是一种在有序数据集合中高效查找目标值的算法。它通过不断将查找范围缩小一半&#xff0c;快速定位目标&#xff0c;时间复杂度为 O(logn)&#xff0c;远优于线性查找的 O(n)。1.原理…...

FJSP:蛇鹫优化算法(SBOA)求解柔性作业车间调度问题(FJSP),提供MATLAB代码

FJSP&#xff1a;蛇鹫优化算法&#xff08;SBOA&#xff09;求解柔性作业车间调度问题&#xff08;FJSP&#xff09;&#xff0c;提供MATLAB代码当车间调度遇上非洲大草原的蛇鹄&#xff0c;会碰撞出什么样的火花&#xff1f;今天咱们用MATLAB实现一种新颖的群智能算法——蛇鹄…...

《QGIS快速入门与应用基础》239:指北针样式选择(预设/自定义)

作者:翰墨之道,毕业于国际知名大学空间信息与计算机专业,获硕士学位,现任国内时空智能领域资深专家、CSDN知名技术博主。多年来深耕地理信息与时空智能核心技术研发,精通 QGIS、GrassGIS、OSG、OsgEarth、UE、Cesium、OpenLayers、Leaflet、MapBox 等主流工具与框架,兼具…...

DALL-E2-pytorch训练日志完全解读指南:如何从loss曲线判断模型健康状态

DALL-E2-pytorch训练日志完全解读指南&#xff1a;如何从loss曲线判断模型健康状态 【免费下载链接】DALLE2-pytorch Implementation of DALL-E 2, OpenAIs updated text-to-image synthesis neural network, in Pytorch 项目地址: https://gitcode.com/gh_mirrors/da/DALLE2…...

揭秘League Akari:如何通过LCU API革新英雄联盟游戏体验?

揭秘League Akari&#xff1a;如何通过LCU API革新英雄联盟游戏体验&#xff1f; 【免费下载链接】League-Toolkit 兴趣使然的、简单易用的英雄联盟工具集。支持战绩查询、自动秒选等功能。基于 LCU API。 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit …...

TranslucentTB深度解析:如何用5MB内存实现Windows任务栏的视觉革命

TranslucentTB深度解析&#xff1a;如何用5MB内存实现Windows任务栏的视觉革命 【免费下载链接】TranslucentTB A lightweight utility that makes the Windows taskbar translucent/transparent. 项目地址: https://gitcode.com/gh_mirrors/tr/TranslucentTB 在Windows…...

免费降AI vs 付费降AI:省下的钱够不够你重新查重?

选降AI工具这件事&#xff0c;我前后折腾了大半个月。起因很简单&#xff1a;论文用DeepSeek写了初稿&#xff0c;知网一查AI率直接飙到90%多&#xff0c;导师让我三天内搞定。 先说结论&#xff1a;免费降AI率工具能用&#xff0c;但别指望它帮你一步到位。 我试了五六个免费…...