电商爬虫系统|电商数据采集|电商API商品数据采集

1、基本的说明

当初为了在几个电商网站抓取商品信息数据搭建的系统。该系统主要用来抓取电商网站上面的一百个左右品类的商品的价格信息、商品信息和折扣信息等。抓取的电商网站主要是某宝和某东。其他的电商网站抓取信息的方式无外乎这两种。跟其他的示例代码不同,该系统通过定时执行的方式将商品的信息分开抓取、存储,用到的时候再组合以降低被 block 的可能性。另外,在开发的时候我设计了任务调度的规则,以使得多个计算机可以并行执行任务。

该系统分成几个部分,java 部分主要是用来进行开发调试使用的,爬虫没使用 java 来实现。java 部分使用了基于 jsoup 的静态网页分析框架。另外,部分数据库 schema 是通过 java 的代码生成的 SQL 语句。Python 部分分成某宝和某东两种爬虫方式。这两个网站的爬虫方式有所区别,但是也可以基本覆盖你需要爬虫的网页类型。

具体的项目结构,

-- data:        Excel 处理之后的部分数据表格
-- java-spider: 包含数据库读写的 java 程序,用来自动生成数据库 schema,包含 jsoup 爬虫示例
-- python:      某东和某宝的爬虫系统
-- shell:       用来在服务器上面部署的定时脚本
-- resources:   一些相关的资料和 API
-- sql:        数据库表的创建语句

另外,这个系统没使用任何框架比如 Scrapy.

2、具体的设计

系统是使用 Linux 系统的 Cron 服务采用定时的方式执行的,如上所述,将商品的信息分开抓取。如果要分析代码,从 shell 脚本开始查看即可。关于具体的环境和配置中可能存在的一些问题,可以参考 python 目录下面的 README 文件。

2.1 某东的抓取系统设计

这里用到了两种持久化方式,分别是关系型数据库 MySQL 以及非关系型数据库 Redis. MySQL 用来记录某个商品的信息、分类信息、品牌信息和折扣信息。Redis 通过哈希表数据结构存储某个商品在某个时间段的价格信息。这也是为了后续使用数据库的时候的性能和方便的考虑。

首先抓取需要抓取信息的品类的信息,这里将所有的品类信息存储到 gt_channel 数据库表中。这里用到了乐观锁设计,可以拓展多个系统,每个系统执行的时候首先从数据库中根据上次处理时间找到当天需要抓取数据的品类,然后对该品类的信息进行抓取。这样,只要数据源唯一,就可以通过增加服务器提升抓取数据的数量。

某东的数据抓起来比较简单,有些信息是通过接口获取的,有些是通过静态的网页分析就可以拿到的。所以,我们完全可以根据具体的接口的详情设计系统。比如,当你使用一些框架的时候,对某个产品你需要依次获取它的价格、折扣和详情信息。但是对于详情信息这种数据,没必要多次获取。对于折扣信息,我们可以通过一个接口获取多个产品的信息,如果对每个产品请求一次,请求太多,被 block 的风险也高。

2.2 某宝的抓取设计

某宝的反爬做得更好,商品信息是通过动态网页的形式下发的,抓取比较困难。而且查看商品信息的时候需要使用手机验证码登录之后才能查看商品的完整的信息。所以,这需要用到动态网页信息抓取的框架。当前,比较好用的两个框架分别是,pyppeteer 和 selenium. 但是后者使用起来配置环境比较麻烦,前者更加简单。前者通过 (Headless) Chrome 实现,即没有界面的浏览器(所以才方便在 Linux 等系统上面执行),是按照基于 javascript 的 puppeteer 实现的非官方的 Python 框架。这里不介绍它的使用了,可以参考 tb.py 这个文件来了解如何使用的。

2.3 关于防爬和 UserAgent

网站会在域名下的 robots.txt 文件中声明自己的爬虫许可,比如 Bing 的是 https://cn.bing.com/robots.txt. 关于具体的含义可以查看相关的文章自行了解。

对 UserAgent 被禁的情形。开源的库 fake_useragent 可以用来动态获取 UserAgent,但是这并不总是有效。所以,这里我用了 useragent.py 用来随机获取 UserAgent.

其他

开发这个系统的时候,我看了一些关于爬虫的书籍,不过感觉都跟小孩玩过家家一样,并不具备实际应用的可能性。这个项目主要是一个系统性的设计。我觉得这是写代码最有意思的地方。当然这个项目还有需要完善的地方。

这个项目去年就把代码放到 Github 上了,不过最近才有时间写 README. 因为时间有些久远,我在撸代码的时候更多得使用手写的方式设计流程和整理思路,所以也没保留下什么设计和流程图。如果想了解的话,就按 Linus 的那句名言所说,RTFSC 吧。

该项目仅供交流使用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/482323.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【redis】服务器架构演进

架构演进 单机架构应用数据分离架构应⽤服务集群架构读写分离 / 主从分离架构冷热分离架构垂直分库微服务架构 单机架构 所有的应用服务、业务所需的数据、业务处理等都在一台服务器上。 在初期,用户访问量很少,对服务器的的性能和安全没有很高的要求&am…

抖音视频无水印批量下载软件|爬虫视频采集工具

抖音视频无水印批量下载软件,轻松实现视频提取和下载 概述: 想要快速、方便地提取和下载抖音视频无水印?我们的抖音视频无水印批量下载软件将是您的得力助手!不仅支持通过关键词批量提取视频,还可以针对特定视频进行提…

Linux安装Nacos

安装前必要准备 准备Java环境 ,8以上的版本,mysql(集群相关信息),nginx(进行代理) 安装Nacos 首先我们要有一个nacos的包,我们可以在线下载,也可以提前下载好&#xf…

IRIS 和 Caché 是什么关系

我们都知道真正一个数据库通常是 2 个部分组成的,存储和进程。 Cach Cach 的定义就是一个数据库,在这个数据库中有存储和进程。 与我们常用的 MySQL 来说,我们安装好 MySQL 后我们就可以通过客户端进行连接了,同时我们还可以通过…

二叉树的链式结构和遍历(下)

又见面了,小伙伴们。今天我们继续来学习二叉树,今天的内容相对来说比较容易理解,前提是需要你们自己动手画图才会好理解。眼过千遍不如手过一遍。所以小伙伴们要多动手哦。直接开始今天的学习吧 1.二叉树链式结构的实现 1.1 前置说明 在学习…

Stability AI发布Stable Video 3D模型:可从单张图像创建多视图3D视频,视频扩散模型史诗级提升!

Stability AI发布了Stable Video 3D (SV3D),这是一种基于稳定视频扩散的生成模型,推动了3D技术领域的发展,并大大提高了质量和视图一致性。 该版本有两个版本: SV3D_u:该变体基于单图像输入生成轨道视频,无需相机调节。 SV3D_p:扩…

鸿蒙Harmony应用开发—ArkTS(@Link装饰器:父子双向同步)

子组件中被Link装饰的变量与其父组件中对应的数据源建立双向数据绑定。 说明: 从API version 9开始,该装饰器支持在ArkTS卡片中使用。 概述 Link装饰的变量与其父组件中的数据源共享相同的值。 限制条件 Link装饰器不能在Entry装饰的自定义组件中使用…

伊理威科技:抖音开网店新手刚做选啥品

在数字浪潮中,抖音不仅是展示才艺的舞台,更是创业者的新天地。新手若想在这片热土上开垦网店,选品便是首要课题。选择产品如同种下希望的种子,既要考量土壤肥沃度,也得预测风雨适宜期。 兴趣与专长是选品的罗盘。热爱所…

STM32之HAL开发——RCC外设CubeMX配置时钟

RCC外设介绍 RCC是Reset and Clock Control (复位和时钟控制)的缩写,它是STM32内部的一个重要外设,负责管理各种时钟源和时钟分频,以及为各个外设提供时钟使能。RCC模块可以通过寄存器操作或者库函数来配置。 RCC是复位和时钟控制模块&#…

GeoAI 简明教程

想象一下,能够在野火发生后立即发现它,可视化全球人口变化,或者立即从地图中提取线条。 GeoAI,即地理空间人工智能,是指地理信息系统 (GIS)、人工智能 (AI) 和机器学习 (ML) 的交叉点。 这个领域正在彻底改变我们与世界…

数据结构 - 二叉树非递归遍历

文章目录 前言一、前序二、中序三、后序 前言 本文实现二叉树的前中后的非递归遍历,使用栈来模拟递归。 文字有点简略,需要看图和代码理解 树节点: typedef char DATA; //树节点 typedef struct Node {DATA data; //数据struct Node* left…

基于springboot+vue的物资仓储物流管理系统(源码+论文)

作者主页:Java码库 主营内容:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app等设计与开发。 收藏点赞不迷路 关注作者有好处 文末获取源码 技术选型 【后端】:Java 【框架】:spring…

数据治理的迷失:揭开“屎上雕花”现象的真相

数据治理是企业信息化建设的核心环节,它直接关系到数据的质量、安全性和价值实现。然而,在实际操作中,不少企业却陷入了“屎上雕花”的误区,即在数据本身存在问题的情况下,试图通过表面的修饰来提升数据的外在表现&…

QT:三大特性

QT的三大特性: 1、信号与槽 2、内存管理 3、事件处理 1、信号与槽 当信号产生时,就会自动调用绑定的槽函数。 自定义信号: 类中需要添加O_OBJECT宏 声明: signals标签之下进行声明 定义: 信号不需要定义 …

使用 PyOpenGL 进行 2D 图形渲染总结

一、说明 OpenGL是一个广泛使用的开放式跨平台实时 3D 图形库,开发于二十多年前。它提供了一个低级API,允许开发人员以统一的方式访问图形硬件。在开发需要硬件加速且需要在不同平台上运行的复杂 2D 或 3D 应用程序时,它是首选平台。它可以在…

Day 14 JDBC

JDBC 1、简单入门 Statement2、preparedStatement3、主键回显4、批量操作5、事务6、Druid6.1 工具类V16.2 工具类V26.3 1、简单入门 Statement 步骤: 1、注册驱动 2、创建连接 3、创建 Statement对象 4、编写sql语句 并且发送sql语句获得结果集 5、解析结果集 6、释放资源 注意…

1、Dev软件的安装

预先善其事,必先利其器,想要学习编程语言的第一步就是学会使用编译软件,在这里我们所使用的编译软件为 Dev-cpp 5.11 ,在这一章节,我们将讲述如何下载并安 Dev-cpp 5.11。 一、下载 首先,我们要先学会下载 Dev-cpp 5.11,这里我们点击:Dev-cpp 5.11,即可完成下载,注…

Appium —— 移动应用自动化测试开源工具!

Appium介绍 Appium是一个用于自动化移动应用程序的开源工具,它支持iOS和Android平台。通过Appium,开发人员可以使用各种编程语言(如Java、Python、Ruby等)编写测试脚本,以自动化测试移动应用程序的功能和用户界面。Ap…

pytest运行结果解析及其改造

简介:场景假设 - 当运行pytest完成后,需要针对运行的结果进行即时的反馈,打印 PASS 或者 FAIL,及其运行失败的原因,最后将结果推送给消息机器人。 历史攻略: pytestallure安装和使用 pytest:…

C# 对App.config、Web.config的appSettings节点数据进行加密

appSettings加密原因,就是因为容易暴露服务器账号和密码,而且客户也不允许 使用ASP.NET提供的命令工具aspnet_regiis来创建加密命令;aspnet_regiis是提供了直接对配置文件加密的功能的;并且使用aspnet_regiis加密的配置节点在读取…