crawler.md 4.99 KB

publish

账号信息

【iconfont】 http://iconfont.cn yue.liu@yoho.cn/yohoicon

UFO 爬虫

仓库地址

http://git.yoho.cn/fe/spider-ufo

  • 目前只用到比价功能(price-task),神箭手废弃

        // 每天的凌晨1点10分触发,全量更新毒的价格数据
        // 仅生成productId对应关系,并存到数据库
        schedule.scheduleJob('0 10 1 * * *', () => {
                logger.info('[process]task start priceTask');
                priceTask()
        });
    
        // 整点执行对应关系表中所有商品的价格对比
        schedule.scheduleJob('0 0 * * * *', () => {
                logger.info('[process]task start spiderAllTask'); // 比价任务-all
                spiderAllTask(dayjs().unix());
        });
    
        // 每隔15分钟获取固定对应关系的商品数据
        // /data/skns.json
        schedule.scheduleJob('0 */15 * * * *', () => {
                logger.info('[process]task start spiderTask'); // 比价任务
                spiderTask(dayjs().unix());
        });

## 需求

我们用户量少,价格不透明,为了防止恶意出价,需要与有一定权威的出价比对。
DU app用户量多,自然形成了市场经济。所以有了爬虫项目。

## 数据爬取原理

du APP商品的spuId从0递增,故目前实现方案是遍历访问Du H5详情页 https://m.poizon.com/router/product/ProductDetail?spuId=249&sourceName=shareDetail 获取商品数据,根据商品编号相同获取对应关系

// 预估,需要手动递增 let productIds = 82000;

for(let i=0; i<productIds; i++) { fetch(i); }

获取du所有商品


## 发布时需要修改的潜在bug

// price-task.js中会在启动时获取所有的du.json文件的数据 const allData = await DuDataModel.findAll();

因为该文件没有清理,会累加。

node v8的内存限制为 64位系统约为1.4GB,32位系统约为0.7GB

当文件大小超过内存限制时启动回报out-of-memory错误,需要手动备份下


![](https://cdn.nlark.com/yuque/0/2020/png/193477/1585277751900-d85a46c4-24f8-4590-b09a-89b31a1433f3.png?x-oss-process=image/resize,w_1492)

**环境发布**

注:需要堡垒机权限,没有就找运维申请


登录堡垒机,选择爬虫机器

![](https://cdn.nlark.com/yuque/0/2020/png/193477/1584412736620-b1a4f4ee-1600-4d11-a5eb-620d4abd8993.png#align=left&display=inline&height=42&originHeight=42&originWidth=288&size=0&status=done&style=none&width=288)

项目目录/Data/node/spider-ufo/

/db 文件数据库目录

git pull代码

pm2 list | ls查看运行项目

pm2 stop appName|id 停止项目

pm2 restart spider-ufo 重启

pm2 logs 查看运行状态

**关键文件目录**

1.数据存储目录 /Data/node/spider-ufo/db



![](https://cdn.nlark.com/yuque/0/2020/png/193477/1584412736680-a9232c21-a194-47a0-9b05-f83d7a9948d9.png#align=left&display=inline&height=18&originHeight=18&originWidth=396&size=0&status=done&style=none&width=396)  毒全量商品数据(可精简)

![](https://cdn.nlark.com/yuque/0/2020/png/193477/1584412736579-55e20cc9-2899-4ea7-b1ea-6d8dca33d203.png#align=left&display=inline&height=17&originHeight=17&originWidth=483&size=0&status=done&style=none&width=483) ufo商品与毒商品的对应关系(神箭手已停)

2.爬取日志目录 /Data/logs/node/

3.每天爬取的毒全量数据日志目录 /Data/logs/node/prices/

![](https://cdn.nlark.com/yuque/0/2020/png/193477/1584412736640-117631b9-e750-4f98-95b2-faffac3be799.png#align=left&display=inline&height=66&originHeight=66&originWidth=429&size=0&status=done&style=none&width=429)

**常见问题定位**

1.ufo比价与毒的价格不一致

        查询ufo与毒的货号进行对比
        查询ufo与毒的关系文件,是否有对应关系,如果存在对应关系,则查找爬取日志找到对应商品尺码的各种日志,如果不存在对应关系,则查找毒全量商品数据是否存在该商品并对比货号(注意空格或特殊字符)

**上传数据查询**

yoho运维平台->其他->sql通用查询

当前数据源: ufo  DB列表: ufo_product

```select *  from channel_sku_compare where product_id = 10044469```

**后续优化**

        1.毒全量商品数据存储精简,只需要存储ID,货号等必要信息
        2.进行增量更新或部分增量更新,对已爬取的毒商品数据不进行抓取或每周抓取,以及根据对应关系抓取后的数据不一致时进行更新
        3.更换存储介质


**代码**

![](https://cdn.nlark.com/yuque/0/2020/png/193477/1584412736673-850a0f0d-edb5-445b-b2b8-f244530ec5d7.png#align=left&display=inline&height=1294&originHeight=1294&originWidth=1336&size=0&status=done&style=none&width=1336)

# 毒销售数据爬虫

**仓库地址**

[http://git.yoho.cn/fe/spider-du](http://git.yoho.cn/fe/spider-du) (目前已停用)

# 闲鱼UFO销售数据报表
**仓库地址**

[http://git.yoho.cn/fe/yoho-dashboard-ufo](http://git.yoho.cn/fe/yoho-dashboard-ufo)