2、苏宁百万级商品爬取 思路讲解 类别页数爬取

简介: 通过上述章节内容,我们得到了类别的数据,现在我们需要对每个类别进行商品的爬取。点击移动电源,进行商品总页数抓取,这个模块相对简单,正好适合用来练手。我们可以从“列表页.png”的图片中看到,当前移动电源的页数为右上角所显示 1/100,即100页.xpath的获取如第三张图所示,结果为//*[@id="second-filter"]/div[2]/div/span类别.png列表页.pngxpath.png分析出了如果获取页数,我们现在要考虑的问题是,如果更新所有的类别。

通过上述章节内容,我们得到了类别的数据,现在我们需要对每个类别进行商品的爬取。点击移动电源,进行商品总页数抓取,这个模块相对简单,正好适合用来练手。
我们可以从“列表页.png”的图片中看到,当前移动电源的页数为右上角所显示 1/100,即100页.
xpath的获取如第三张图所示,结果为
//*[@id="second-filter"]/div[2]/div/span

img_cd33f0b17565a030edc64b1b4e4eabd9.png
类别.png

img_d8d674f7173db56c34d14d06240814e8.png
列表页.png
img_3456325df80beeced01b281935ae7bf7.png
xpath.png

分析出了如果获取页数,我们现在要考虑的问题是,如果更新所有的类别。
其实思路非常简单,从数据库中取出对应的等级为3的类别(最底层类别),对这些类别进行循环,参数就是当前行的url,然后执行网页爬取代码,得到页数,更新数据。


img_693e118fd4d29cd506798b51c469ff0b.png
数据库类别数据.png

根据Sql语句,得到等级为3的类别一共有4197个。这个时候就存在问题了,如果同步执行(循环一个一个执行),那么我的效率就很低,为了验证自己的写法。我以50个类别为例做了一个小demo测试性能。

     //获取符合条件的列表
     var urlList = _categoryService.GetListByLevel(3).Select(u => u.Url).ToList();

CategoryPageAnalysis.GetData(string url) 方法为获取类别个数方法

同步

循环执行,耗时18233毫秒

            var dics = new Dictionary<string, int>();
            foreach (var url in urlList)
            {
                dics.Add(url, CategoryPageAnalysis.GetData(url));
            }

异步方法

6163毫秒 3倍的效率差
异步方法体的说明如下:
首先因为存在4197个类别,需要对这些类别进行分类。
4197/2000 约等于20. 即开20个线程,每个线程执行200条数据

            int pageNum = 200;
            int pageCount = urlList.Count % pageNum == 0 ? urlList.Count / pageNum : urlList.Count / pageNum + 1;
            var pageListCollection = new List<List<string>>();
            for (int i = 0; i < pageCount; i++)
            {
                var pageList = urlList.Skip(i * pageNum).Take(pageNum).ToList();
                pageListCollection.Add(pageList);
            }
            Console.WriteLine(pageCount);

            //异步 6163毫秒 3倍的效率差
            int pageIndex = 1;
            List<Task> taskList = new List<Task>();
            foreach (var pageList in pageListCollection)
            {
                try
                {
                    Task task = Task.Factory.StartNew(() =>
                    {
                        var dics = new Dictionary<string, int>();
                        foreach (var url in pageList)
                        {
                            dics.Add(url, CategoryPageAnalysis.GetData(url));
                        }

                        lock (lock_obj)
                        {
                            _categoryService.BatchUpdatePage(dics);
                        }
                    });
                    taskList.Add(task);
                }
                catch (Exception ex)
                {
                    Console.WriteLine($"button3_Click 异步{ex.Message}");
                }
            }

存在的问题:

这种方法是为了单独解决这个问题而使用的,很笨拙,因为如果只有200个类别,多线程的意义就没有办法体现出来,这一点在之后的编码中我进行了修改。

目录
相关文章
|
25天前
|
API 数据安全/隐私保护 开发者
淘宝 API:关键词搜商品列表接口,助力商家按价格销量排序分析数据
此接口用于通过关键词搜索淘宝商品列表。首先需在淘宝开放平台注册并创建应用获取API权限,之后利用应用密钥和访问令牌调用接口。请求参数包括关键词、页码、每页数量、排序方式及价格区间等。返回结果含总商品数量及具体商品详情。使用时需注意签名验证及官方文档更新。
|
24天前
|
数据采集
以“股票代码实时抓取股票信息”为例的爬虫案例
爬虫—根据股票代码实时抓取股票信息
52 0
|
3月前
|
Oracle Java 关系型数据库
淘宝粗排问题之引入场景外成交样本以优化全域成交hitrate,如何解决
淘宝粗排问题之引入场景外成交样本以优化全域成交hitrate,如何解决
|
6月前
|
数据采集 监控 供应链
shopee商品列表数据接口丨关键词搜索shopee商品数据采集
shopee商品列表数据接口丨关键词搜索shopee商品数据采集
|
机器学习/深度学习 存储 人工智能
毫秒级!千万人脸库快速比对,上亿商品图片检索,背后的极速检索用了什么神器? ⛵
为了让计算机理解、处理和表征非结构化数据,我们通常将其转换为密集向量,而海量向量数据的存储、管理和查询并不简单。本文介绍 Milvus 这个开源向量数据库管理平台的优势、架构和使用案例,了解其在简化『机器学习操作(MLOps)』流程中的应用
5137 2
毫秒级!千万人脸库快速比对,上亿商品图片检索,背后的极速检索用了什么神器? ⛵
|
数据可视化 前端开发 Python
基于搜索指数可视化分析近十年的中秋热度
基于搜索指数可视化分析近十年的中秋热度
168 0
基于搜索指数可视化分析近十年的中秋热度
Crawl:利用bs4和requests爬取了国内顶级某房源平台(2020年7月2日上海二手房)将近30*100多条数据并进行房价分析以及预测
Crawl:利用bs4和requests爬取了国内顶级某房源平台(2020年7月2日上海二手房)将近30*100多条数据并进行房价分析以及预测
Crawl:利用bs4和requests爬取了国内顶级某房源平台(2020年7月2日上海二手房)将近30*100多条数据并进行房价分析以及预测
|
SQL 算法 搜索推荐
一招搞定电商首页随机排序数据算法
大家好前面我们了解了order by的实现方式以及内部的涉及到的知识点。今天我们介绍一下关于实战的知识点。主要应用于表数据比较多的情况下,如何巧妙地从中取出几条数据。
一招搞定电商首页随机排序数据算法
|
机器学习/深度学习 JSON 数据可视化
实战|教你爬取全国火锅店数量,并利用地图可视化展示
大家好,我是阿辰,今天教大家如何获取全国不同城市火锅店数量情况,并将这些数据进行可视化展示,以更加直观的方式去浏览全国不同省份、不同城市的火锅店分布情况。 本文数据来自于某度地图,通过python技术知识去获取数据并进行可视化。
345 0
|
数据库
1、苏宁百万级商品爬取 思路讲解 类别爬取
苏宁类别面 https://list.suning.com/ 解析图.png 通过图可知,总共有N个类别,每个类别都是一个DIV区块,然后再继续分解DIV区块分析内容。
967 0