3.3、苏宁百万级商品爬取 代码讲解 商品爬取

简介: 接下去进入代码的模块,首先我们分析一下如何实现代码我们拥有一张类别表,类别表中记录了 类别名称,编码,地址,该类别所拥有的页数等信息类别表.png抽象描述:取出所有的类别循环类别集合循环类别页数得到当前类别当前页集合数据插入数据库对上述内容我们又几个地方需要注意,我们依次说明第一点 数量量大类别大致有4000多个,每个类别页数各不相同(一页60个商品是固定的),这么多的商品数据,如果我们还是采用同步方法依次执行的话,效率势必大打折扣,爬取所需花费的时间也很长。

接下去进入代码的模块,首先我们分析一下如何实现代码
我们拥有一张类别表,类别表中记录了 类别名称,编码,地址,该类别所拥有的页数等信息


img_63fe6bc530316f5eedd6ef41162abee7.png
类别表.png

抽象描述:

  1. 取出所有的类别
  2. 循环类别集合
    循环类别页数
    得到当前类别当前页集合数据
    插入数据库

对上述内容我们又几个地方需要注意,我们依次说明

第一点 数量量大

类别大致有4000多个,每个类别页数各不相同(一页60个商品是固定的),这么多的商品数据,如果我们还是采用同步方法依次执行的话,效率势必大打折扣,爬取所需花费的时间也很长。这个时候我们就要考虑多线程执行。
作者的思路是这样的:
不管数据量有多少,固定线程数量20个,即我只开20个线程处理任务。每个线程处理一个类别的工作任务。因为有的类别页数有100个,有的类别页数只有10个,这一块如何继续平均分配,不做考虑,各位可以开动大家的脑筋。

第二点 数据库如何存储

如此多的数据,我们应该如何存储。我们爬取的是相同的商品数据,只是内容不同。所以很自然的我们想到了分表。我们既然分表了,那么势必涉及到以后的查询,查询我们以后使用的是Lucene,自己建立一个简答的搜索引擎。在此基础之上,我们在表设计的时候就没有太大的约束。以下是我的商品表的设计图

img_58598cbabe74745c63fa8b8c1782a162.png
商品数据表.png

Id 主键自增
SUID  商品唯一码
CategoryId 商品类别
Titile 商品名称
Description 商品描述
Price 价格
Url 地址
ShopName 店铺名称

商品编码来源于每一个li标签的id【如下图】,我们可以看到这是一个数字编码。我假设这个编码是一个自增的数字,那么我就可以使用百分取余的方法确定这个商品应该放在哪个表中。这是什么意思呢。
我们假设自己有20张表,每个表的数据结构都如上述描述的那样,那我们要解决的问题就是数据应该如何存储的问题。
自增数字的取余意思就是。如果当前编号是30001
30001 % 20=1 存放在商品表1中 Commodity_01
40871 % 20=11 存放在商品表11中 Commodity_11
这样做的好处是什么呢,因为商品如果是自增累加的。通过此方法可以平均分配每张表的数据,不会让某张表数据多,而某张表数据少

img_e91631e9ebe75c315ae944c26f44deee.png
image.png

第三点 数据插入如何操作

我们可以从上文中了解到,在得到当前也数据后,我们要将其集合(60个)插入数据库,选用何种方式可以保证事务基础上又减少数据库链接是要考虑的问题。
以下是我的思路,贴代码讲解
代码为剪贴版,要看全部代码可以去我的github上面下载最新的源码

 //取值
List<POCO_Commodity> cateList = CommodityAnalysis.GetData(category.Url, category.Id, i);
 //处理
 List<CommodityGroupInput> groupList = cateList.GroupBy(u => Convert.ToInt64(u.SUId) % StaticConst.CategorySheetCount).Select(u => new CommodityGroupInput
 {
Id = u.Key,
Units = u.OrderBy(p => p.SUId).ToList()
}).ToList();
 //入库
_commodityService.InsertGroupBulk(groupList);

第一步取值,参数为 地址,类别码,页码
第二步是对List集合的分组,分组条件为唯一码%20,得到的内容为
[表索引号,对应的集合]
第三步,入库,代码贴图如下

img_8c16fda4f4e485c2d56d278628795a59.png
入库代码.png

入库数据库操作我通过dapper实现,不知道dapper是什么的,可以自行百度。代码的解释如下,使用dapper数据库链接,开启事务,对形参集合进行SQL语句拼接。

目录
相关文章
|
JSON API 数据格式
快手API接口:根据关键词获取海量商品列表的秘诀
快手API接口:根据关键词获取海量商品列表的秘诀
163 1
|
存储 JSON API
API接口在电商商品数据获取中的应用
在当前的数字化时代,电子商务平台已经成为了人们购物的主要场所之一。许多电商平台都提供了API接口,以便开发者可以获取商品数据并进行创新应用。本文将深入探讨如何使用API接口获取商品数据,以及如何将这些数据应用到电商领域中。
|
1月前
|
搜索推荐 数据挖掘 API
抖音商品详情API接口对电商的作用及收益
在电商快速发展的背景下,抖音作为全球领先的短视频平台,凭借其庞大的用户基础和高活跃度,通过商品详情API接口为电商行业开辟了新渠道。本文深入解析了抖音商品详情API接口的功能及其对电商的积极作用,包括商品信息实时同步、提升用户体验、精准营销、数据分析与优化等方面,展示了该接口如何帮助电商企业拓展销售渠道、优化商品策略、提升用户满意度、促进跨界合作与开发创新商业模式,为电商企业带来显著收益。同时,文章也探讨了实现这些收益的关键步骤及面临的挑战,强调了数据安全与隐私保护的重要性,以及创新和差异化竞争的必要性。
65 4
|
2月前
|
API 数据安全/隐私保护 开发者
淘宝 API:关键词搜商品列表接口,助力商家按价格销量排序分析数据
此接口用于通过关键词搜索淘宝商品列表。首先需在淘宝开放平台注册并创建应用获取API权限,之后利用应用密钥和访问令牌调用接口。请求参数包括关键词、页码、每页数量、排序方式及价格区间等。返回结果含总商品数量及具体商品详情。使用时需注意签名验证及官方文档更新。
|
7月前
|
JSON 搜索推荐 数据挖掘
电商数据分析的利器:电商关键词搜索API接口(标题丨图片丨价格丨链接)
淘宝关键词搜索接口为电商领域的数据分析提供了丰富的数据源。通过有效利用这一接口,企业和研究人员可以更深入地洞察市场动态,优化营销策略,并提升用户体验。随着电商平台技术的不断进步,未来的API将更加智能和个性化,为电商行业带来更多的可能性。
|
7月前
|
JSON 安全 API
解锁淘宝商品评论API接口:电商数据分析的新视角
淘宝商品评论API接口是淘宝开放平台提供的一组API接口,允许开发者通过编程方式获取淘宝商品评论数据。这些接口可以获取到商品的详细信息、用户评论、评分等数据,为电商数据分析提供了丰富的素材。
|
7月前
|
缓存 监控 测试技术
如何高效地利用淘宝API接口获取商品数据
在电商领域,能够快速且准确地获取商品数据是至关重要的。淘宝作为中国领先的电商平台,通过其开放的API接口为商家们提供了强大的数据服务功能。本文将验证如何高效地利用淘宝API接口获取商品数据,并提供一套行之有效的策略和步骤。
|
7月前
|
JSON API 数据格式
抖音商品详情API接口在电商行业中的重要性及实时数据获取实现
随着移动互联网的快速发展,电商行业不断壮大。抖音作为一款短视频社交应用,近年来在电商领域取得了显著成果。本文将探讨抖音商品详情API接口在电商行业中的重要性,以及如何通过实时数据获取提高业务效率。我们将介绍相关的技术背景、API接口的基础知识、实时数据获取的方法和代码实现,并通过一个案例来展示具体应用。
|
7月前
|
存储 JSON 监控
京东商品详情接口在电商行业中的重要性及实时数据获取实现
随着电子商务的快速发展,电商平台上的商品数量不断增加,竞争也越来越激烈。对于电商企业来说,如何快速、准确地获取商品详情信息变得至关重要。京东作为中国最大的电商平台之一,提供了商品详情接口,为电商企业提供了强大的支持。本文将深入探讨京东商品详情接口在电商行业中的重要性,并通过实例代码介绍如何实现实时数据获取。
|
缓存 NoSQL 数据库
40分布式电商项目 - 网站首页(缓存广告数据)
40分布式电商项目 - 网站首页(缓存广告数据)
61 0
下一篇
DataWorks