# spider_TAB **Repository Path**: gitDux/spider_TAB ## Basic Information - **Project Name**: spider_TAB - **Description**: No description available - **Primary Language**: Python - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-12-20 - **Last Updated**: 2022-04-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # spider #### 介绍 - 使用 **python - scrapy** 框架搭建 **TAB** 三个网站的实例规格爬虫 - 并输出各实例的属性为 **excel** 文件。 - 最终以邮件形式发送到用户 为了实现各个页面信息的爬取,一共开发了如下几个爬虫文件: | 云服务商 | 爬虫名 | 功能 | 目标链接 | | -------- | ------------------- | --------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | 阿里 | ali-family | 爬取CPU信息、配比信息、应用场景等 | https://help.aliyun.com/document_detail/25378.html | | 阿里 | ali-family-details | 爬取实例软硬件细节信息 | https://help.aliyun.com/document_detail/25378.html | | 百度 | bai-family | ~ | https://cloud.baidu.com/doc/BCC/s/wjwvynogv | | 百度 | bai-family-details | ~ | https://cloud.baidu.com/doc/BCC/s/wjwvynogv | | 百度 | bai-price | 爬取实例价格表 | https://cloud.baidu.com/product-price/bcc.html | | 腾讯 | tcnt-family | ~ | https://cloud.tencent.com/document/product/213/11518
https://cloud.tencent.com/document/product/560/19700
https://cloud.tencent.com/document/product/560/63854
https://cloud.tencent.com/document/product/386/63404 | | 腾讯 | tcnt-family-details | ~ | https://cloud.tencent.com/document/product/213/11518 | | 华为 | hua-family | ~ | 见config.json**hua-family** `./testPro/testPro/conf/config.json` | | 华为 | hua-family-details | ~ | https://support.huaweicloud.com/productdesc-ecs/zh-cn_topic_0159822360.html | | 华为 | hua-price | ~ | 见config.json**hua-price** `./testPro/testPro/conf/config.json` | ### **python 环境说明** 本项目使用轻量级 **python** 虚拟环境工具 virtualenv 环境配置步骤如下: ```shell $ pip install virtualenv # 安装虚拟环境工具 $ virtualenv -p python3 spider # 创建spider独立环境 $ echo alias spider='source PATH_OF_ENV_ACTIVATE_FILE' >> ~/.bashrc (or ~/.zshrc) # 配置启动虚拟环境的命令 $ spider #启动环境 ``` #### 安装方法 ```shell pip install -r requirements.txt # wait for a while ``` ### 使用方法 #### level 0 简单实用:run.sh脚本运行所有流程 ```shell >>> bash run.sh ``` ```mermaid graph TD A[抓取表格] A1([config.json:爬虫参数]) A2([data.json:CPU参数]) B[实例年度价格计算] B1([config.json:价格计算参数]) C[vCPU:内存 配比计算] D[应用场景翻译] D1([config.json:翻译API参数]) E[差异对比&&压缩打包] F[邮件发送] F1[config.json:目标邮箱] subgraph 依赖1 A1---A A2---A end A--->B A--->C A--->D B1--->E D1--->E C--->E E--->F subgraph 依赖2 D---D1 end subgraph 依赖3 B---B1 end subgraph 依赖4 F---F1 end ``` #### level 1 ##### 单独抓取文件 工作目录:`spider_TAB/testPro` ```bash spider cd ./testPro # 配置表获取 echo 阿里云基础配置表获取中... scrapy crawl ali-family echo 阿里云详细配置表获取中... scrapy crawl ali-family-details echo 百度云基础配置表获取中... scrapy crawl bai-family echo 百度云详细配置表获取中... scrapy crawl bai-family-details echo 腾讯云基础配置表获取中... scrapy crawl tcnt-family echo 腾讯云详细配置表获取中... scrapy crawl tcnt-family-details echo 华为云基础配置表获取中... scrapy crawl hua-family echo 华为云详细配置表获取中... scrapy crawl hua-family-details ``` ##### 价格计算 工作目录:`spider_TAB/testPro` ```bash echo "年费价格计算中..." python ./testPro/CalculatePrice.py bai-price python ./testPro/CalculatePrice.py ali-price python ./testPro/CalculatePrice.py tcnt-price ``` ##### 应用场景翻译 工作目录:`spider_TAB/testPro` ```bash python ./testPro/Translator.py ali-family python ./testPro/Translator.py bai-family python ./testPro/Translator.py tcnt-family python ./testPro/Translator.py hua-family ``` ##### vCPU:内存配比计算 工作目录:`spider_TAB/testPro` ```bash python ./testPro/TableUnion.py ``` ##### 差异对比&&压缩打包 工作目录:`spider_TAB` ```bash source ./spider/bin/activate cd ./outputs diffino ./$1/ali-family.xlsx ./$2/ali-family.xlsx --output ../difference/ali-family.csv diffino ./$1/ali-family-details.xlsx ./$2/ali-family-details.xlsx --output ../difference/ali-family-details.csv diffino ./$1/ali-price.xlsx ./$2/ali-price.xlsx --output ../difference/ali-price.csv diffino ./$1/bai-family.xlsx ./$2/bai-family.xlsx --output ../difference/bai-family.csv diffino ./$1/bai-family-details.xlsx ./$2/bai-family-details.xlsx --output ../difference/bai-family-details.csv diffino ./$1/bai-price.xlsx ./$2/bai-price.xlsx --output ../difference/bai-price.csv diffino ./$1/tcnt-family.xlsx ./$2/tcnt-family.xlsx --output ../difference/tcnt-family.csv diffino ./$1/tcnt-family-details.xlsx ./$2/tcnt-family-details.xlsx --output ../difference/tcnt-family-details.csv diffino ./$1/tcnt-price.xlsx ./$2/tcnt-price.xlsx --output ../difference/tcnt-price.csv cd .. # 打包 cd ./testPro cp -r ./testPro/output/* ../outputs/$path cd .. ls ./outputs|grep output > ./history.txt sort ./history.txt -o ./history.txt python ./utils/cache.py rm -rf ./result.zip zip -r result.zip difference ./outputs/$path ``` ##### 邮件发送 工作目录:`spider_TAB` ```bash python ./utils/AutoMail.py ``` ### 价格表说明 [阿里](https://cn.aliyun.com/price/product#/ecs/detail/vm)和[腾讯](https://buy.cloud.tencent.com/price/cvm)的价格表需要手动下载,然后拖动到 output 文件夹下 阿里链接:https://cn.aliyun.com/price/product#/ecs/detail/vm 腾讯链接:https://buy.cloud.tencent.com/price/cvm ### 配置文件描述 #### 目标地址及爬虫参数配置 每个爬虫对于config.json中的一个字段,以典型的ali-family为例解释配置项目 xpath文档:https://www.runoob.com/xpath/xpath-tutorial.html RE 文档:https://www.runoob.com/regexp/regexp-tutorial.html ```json "ali-family":{ //目标链接列表 "urlList":["https://help.aliyun.com/document_detail/25378.html"], //XPATH 页面内容匹配表达式 "XPATH-section":"//div[@class=\"body conbody\"]/section", "XPATH-title":"h3/text()", //RE 字符串匹配正则表达式 "RE-CPU":"处理器:(.*?) ", "RE-pair":"((.*?))", "RE-ClockSpeed":"(.*?)GHz", "RE-memory": ["计算: (.*?)处理器:","存储: (.*?) 网络:","内存配比(.*?)[ ]"], "RE-network": "网络: (.*?) 适用场景:", "RE-usescenes": " 适用场景:(.*?)包括的实例规格及指标数据如下表所示" }, ``` #### 价格换算公式配置 | CSP | Instance Name | Full name | 公式 | 爬虫获取数据-x | 系统盘费用-y | 折扣-% | 带宽费用-z | | -------- | ------------- | --------------------- | --------- | -------------- | ------------ | ------ | ---------- | | Ali | ECS | Elastic Cloud Service | (x+y+z)*% | From Crawler | 255 | 0.85 | 234.6 | | Tencnent | CVM | Cloud Virtual Machine | x+y*%+z | From Crawler | 210 | 0.83 | 199.2 | | Baidu | bcc | Baidu Cloud Compute | x+y+z | From Crawler | 448.2 | - | | ```json "ali-calculate":{ "y":255, "z":234.6, "c":0.85 }, "bai-calculate":{ "y":448.2, "z":229.08, "c":1 }, "tcnt-calculate":{ "y":210, "z":199.2, "c":0.83 } ``` #### 翻译API配置 ```json "translateAPI":{ //百度翻译url地址 "url":"/api/trans/vip/translate", //注册后得到的appid "appid":"20220120001060635", //用户密钥 "secretKey":"AjChatNyXwEOiiSFFebr" } ``` #### 收件邮箱配置 ```json "MailRecivers":["xiang.sun@intel.com","ted.ye@intel.com","kunye.zhu@intel.com"] ``` #### CPU信息配置 每个family爬虫在 `data.json`中对应一个cpu信息配置字段 ```json "ali-family":{ "ebmc7a":{"Family":"ebmc7a","CPU":"Milan 7T83","ClockSpeed":"2.55/3.5 GHz"}, "ebmc6a":{"Family":"ebmc6a","CPU":"Rome 7H12","ClockSpeed":"2.6/3.3 GHz"}, "ebmg7a":{"Family":"ebmg7a","CPU":"Milan 7T83","ClockSpeed":"2.55/3.5 GHz"}, "ebmr7a":{"Family":"ebmr7a","CPU":"Milan 7T83","ClockSpeed":"2.55/3.5 GHz"}, . . . } ``` ### ToDo * 维护一个配置文件 `./conf/data.json` 包含TAB三家的CPU细节信息(网站未披露)。✔️ * ali.CPUMap:人为维护的CPU表,(方便程序中查询existence); * ali.Data:具体的数据信息(目前包含有 `"Family", "CPU", "ClockSpeed"`三个属性)。 * 维护一个配置文件 `./conf/config.json` 包含基本配置和爬取规则。✔️ * memory、network、usescenes三个表项的优化✔️ * memory内存占比用大表来统计 * network的细节描述格式需要优化,还有很多乱点 * usescenes需要调用 translate API 来 进行 机器翻译 * 02/28 * family E列 去掉尾巴 ✔️ * D 列 ; 隔开✔️ * 删除B列中的 时钟频率 EPYCTM -> EPYCTM角标 ✔️ * 先确认网页没有CPU信息,再查找data.json ✔️ * "Skylake":"SLX" SKX -> SLX ✔️ * 配比 出现 no 修复 ✔️ * details 表 汉字替换 为 英文✔️ * 删除多余描述 Intel Xeon 、AMD EPYC™、AMPERE✔️ * Skylake 替换缩写✔️ * 3/7/2022 * 撰写说明文档✔️ ### Modify Log * 2022/07/01 * 增加了 `trash`文件夹 用来存放历史文件 * 将 ali 两层爬虫转移到 `trash` 文件夹中 * 将 `output`文件夹中的文件 `mv` 到 `trash` 中 * 增加 `conf`文件夹 * 增加 `config.json` 和 `data.json` * 规范 json 配置文件内变量命名 * 2022/19/01 * 增加 `./utils/ExcelPrase.py` 来进行Excel解析和修改 * 读取大表的信息,最终确定每个family的内存配比情况 * 修改小表的信息,将family的内存配比情况添加进去 * 增加 `./utils/translateAPI.py` 用于应用场景的英文翻译 * 优化爬虫代码tenc,baidu中的解析过程,便于代码的维护 * 2022/20/01 * 实现百度翻译 API 的调用,并将相关配置文件加入到 `config.json`中 * 优化了 `tenc.py` 的代码框架 * 百度云的实例规格族是以长度38的Xpath列表给出 * 2022/20/02 * 爬取三朵云的附加数据表 * 对于有些实例有多个列而有些实例列相对较少的问题,采用贪婪爬取。