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

news2024/11/20 9:23:20

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 吧。

该项目仅供交流使用。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[Java、Android面试]_12_java访问修饰符、抽象类和接口

文章目录 1. java访问修饰符2. 抽象类和接口2.1 抽象类2.2 接口2.3 抽象类和接口的区别 本人今年参加了很多面试,也有幸拿到了一些大厂的offer,整理了众多面试资料,后续还会分享众多面试资料。 整理成了面试系列,由于时间有限&…

阿里CICD流水线Docker部署,将阿里镜像私仓中的镜像部署到服务器中

文章目录 阿里CICD流水线Docker部署,将阿里镜像私仓中的镜像部署到服务器中一、CICD流水线的初步使用可以看我之前的两篇文章二、添加部署任务,进行Docker部署,创建一个阿里的试用主机1、选择主机部署,并添加服务主机2、创建免费体…

使用蜂鸣器演奏《生日快乐》

一、音的组成 音乐通常由以下几个基本元素组成: 旋律(Melody):旋律是一系列连续的音符,通过它们的音高和音长来构成乐曲的主旋律部分。旋律是音乐中最容易被人们记住和感知的部分。 节奏(Rhythm&#xff…

如何从零开始拆解uni-app开发的vue项目(一)

uni-app项目分析: 背景:最近接手一个前同事留下的半拉子项目,出拿过来觉得很简单;当我看到app.vue的时候很确定是vue项目,心里不怎么慌,果断安装node.js,然后就去npm ;安装VS code,事实并不是我期盼的那样,或者说根本就不能运行。 报错:应用vs code打开文件,输入命…

【漏洞复现】福建科立迅通信指挥调度平台pwd_update.php SQL注入漏洞 (CVE-2024-2621)

免责声明:文章来源互联网收集整理,请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文章作者无关。该…

如何保障消息一定能发送到RabbitMQ?

我们知道,RabbitMQ的消息最终是存储在Queue上的,而在Queue之前还要经过Exchange,那么这个过程中就有两个地方可能导致消息丢失。第一个是Producer到Exchange的过程,第二个是Exchange到Queue的过程。 为了解决这个问题&#xff0c…

【Transformer】transformer注解

every blog every motto: You can do more than you think. 0. 前言 transformer注解 在过去的一年里,《Attention is all you need》中的transformer一直萦绕在很多人的脑海里。除了在翻译质量上产生重大改进之外,它还为许多其他NLP任务提供了一种新的…

2024年【危险化学品经营单位安全管理人员】新版试题及危险化学品经营单位安全管理人员模拟考试题

题库来源:安全生产模拟考试一点通公众号小程序 危险化学品经营单位安全管理人员新版试题考前必练!安全生产模拟考试一点通每个月更新危险化学品经营单位安全管理人员模拟考试题题目及答案!多做几遍,其实通过危险化学品经营单位安…

matlab 电机仿真平台GUI

1、内容简介 略 74-可以交流、咨询、答疑 2、内容说明 略 电机仿真平台GUI 包含直流机要加调电压启动、回馈制动、串电阻调速 异步电动机要加串电阻启动、星三角启动、回馈制动模块 3、仿真分析 略 4、参考论文 略

【网安】DDoS / Web漏洞 / CC攻击 / 恶意爬虫

【网安】DDoS攻击:方法、影响与防御策略 写在最前面1.DDoS(分布式拒绝服务)攻击2. Web 漏洞利用3. CC(凭证破解)攻击4.恶意爬虫 🌈你好呀!我是 是Yu欸 🌌 2024每日百字篆刻时光&…

Vue介绍使用

文章目录 Vue概念一、Vue快速入门二、Vue常用指令三、Vue生命周期四、案例1、查询所有2、新增品牌 Vue概念 一、Vue快速入门 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title> <…

chap验证实验

一、添加接口 在每个路由器里添加2SA接口 二、配IP 进入serial接口配置IP R1&#xff1a; R2&#xff1a; ppp mp Mp-group 0/0/0 R3: 查看&#xff1a; 三、aaa认证&#xff0c;chap验证 创建一个新用户&#xff1a; R2进入3/0/0接口&#xff1a; R1进入3/0/0接口&a…

蓝桥杯2021年第十三届省赛真题-解密

一、题目 解密 【问题描述】 小明设计了一种文章加密的方法&#xff1a;对于每个字母 c&#xff0c;将它变成某个另外的字符 Tc。下表给出了字符变换的规则&#xff1a; 例如&#xff0c;将字符串 YeRi 加密可得字符串 EaFn。 小明有一个随机的字符串&#xff0c;加密后为EaFnj…

ERNIE SDK 本地使用与markdown自动生成

ERNIE SDK 仓库包含两个项目&#xff1a;ERNIE Bot Agent 和 ERNIE Bot。ERNIE Bot Agent 是百度飞桨推出的基于文心大模型编排能力的大模型智能体开发框架&#xff0c;结合了飞桨星河社区的丰富预置平台功能。ERNIE Bot 则为开发者提供便捷接口&#xff0c;轻松调用文心大模型…

从零开始学习在VUE3中使用canvas(六):lineCap(线条端点样式)

一、简介 lineCap能够让我们设置线条的端点样式&#xff0c;例如 1. butt const ctx canvas.getContext("2d");ctx.lineCap "butt"; // 默认样式&#xff0c;也可以显式指定 2.round const ctx canvas.getContext("2d");//圆头ctx.lineCap …

内存条@电脑支持的最大内存@升级内存硬件

文章目录 电脑支持的最大内存规格cpu官网查看支持的规格命令行查看脚本化 DDR内存LPDDR内存内存升级扩展&#x1f47a;插槽检查板载内存SPD内存厂商其他 内存参数&#x1f47a;性能指标使用软件查看更多内存相关的软件工具 电脑支持的最大内存规格 确认电脑最大支持内存大小和频…

MT2191 整数大小比较(高精度)

给出两个正整数&#xff0c;判断他们的大小。 输入格式&#xff1a; 两个正整数。 输出格式&#xff1a; 若前者大&#xff0c;输出>&#xff1b; 若后者大&#xff0c;输出<&#xff1b; 若一样大&#xff0c;输出。 输入&#xff1a; 1412894619244619891 23762842…

js 质数的因子

功能:输入一个正整数&#xff0c;按照从小到大的顺序输出它的所有质因子&#xff08;重复的也要列举&#xff09;&#xff08;如180的质因子为2 2 3 3 5 &#xff09; 按照从小到大的顺序输出它的所有质数的因子&#xff0c;以空格隔开 输入 180 输出 2 2 3 3 5 let line 180;…

宁波零碳工厂,“零碳工厂”指引未来

&#x1f600;随着环保意识的提高⬆️和全球气候变化问题&#x1f30f;的日益严重&#xff0c;⬇️减少碳排放、实现可持续发展已成为&#x1f30e;全球的共识。而在这个&#x1f504;过程中&#xff0c;宁波的“零碳工厂”建设&#x1f3e9;正成为引领未来的重要趋势。 “零碳…

jeect-boot queryFieldBySql接口RCE漏洞(CVE-2023-4450)复现

jeect-boot积木报表由于未授权的 API /jmreport/queryFieldBySql 使用了 freemarker 解析 SQL 语句从而导致了 RCE 漏洞的产生。 1.漏洞级别 高危 2.漏洞搜索 fofa app"Jeecg-Boot 企业级快速开发平台"3.影响范围 JimuReport < 1.6.14.漏洞复现 这个漏洞的…