数据采集:selenium 获取某网站CDN 商家排名信息

写在前面


  • 工作中遇到,简单整理
  • 理解不足小伙伴帮忙指正

对每个人而言,真正的职责只有一个:找到自我。然后在心中坚守其一生,全心全意,永不停息。所有其它的路都是不完整的,是人的逃避方式,是对大众理想的懦弱回归,是随波逐流,是对内心的恐惧 ——赫尔曼·黑塞《德米安》


采集流程:

  1. 自动登陆
  2. 获取商家排名页当前页数据
  3. 获取总页数,和下一页对应元素
  4. 根据总页数 循环遍历,模拟点击下一页获取数据分页数据
  5. 数据汇总
from seleniumwire import webdriver
import json
import time
from selenium.webdriver.common.by import By
import pandas as pd# 自动登陆
driver = webdriver.Chrome()
with open('C:\\Users\山河已无恙\\Documents\GitHub\\reptile_demo\\demo\\cookie.txt', 'r', encoding='u8') as f:cookies = json.load(f)driver.get('https://cdn.chinaz.com/')
for cookie in cookies:driver.add_cookie(cookie)driver.get('https://cdn.chinaz.com/')time.sleep(6)
#CND 商家排行获取 https://cdn.chinaz.com/
CDN_Manufacturer = []
new_div_element = driver.find_element(By.CSS_SELECTOR, ".toplist-main")
div_elements = new_div_element.find_elements(By.CSS_SELECTOR, ".ullist")
#CDN_Manufacturer.extend(div_elements)
for mdn_ms in div_elements:a_target = mdn_ms.find_element(By.CSS_SELECTOR,".tohome")home_url = a_target.get_attribute('href')print(mdn_ms.text)text_temp =  str(mdn_ms.text).split("\n")CDN_Manufacturer.append({"公司名称": text_temp[0],"官网地址": home_url,"经营资质":  text_temp[1],"CDN网站数量":  text_temp[2],"网站占比": text_temp[3],"IP节点":text_temp[4],"IP占比":text_temp[5],})
sum_page = driver.find_element(By.XPATH,"//a[contains(@title, '尾页')]")
attribute_value = sum_page.get_attribute('val')print(attribute_value)
for page in range(1,int(attribute_value)):next_page = driver.find_element(By.XPATH,"//a[contains(@title, '下一页')]")next_page.click()time.sleep(5)new_div_element = driver.find_element(By.CSS_SELECTOR, ".toplist-main")div_elements = new_div_element.find_elements(By.CSS_SELECTOR, ".ullist")#CDN_Manufacturer.extend(div_elements)for mdn_ms in div_elements:a_target = mdn_ms.find_element(By.CSS_SELECTOR,".tohome")home_url = a_target.get_attribute('href')print(mdn_ms.text)text_temp =  str(mdn_ms.text).split("\n")CDN_Manufacturer.append({"公司名称": text_temp[0],"官网地址": home_url,"经营资质":  text_temp[1],"CDN网站数量":  text_temp[2],"网站占比": text_temp[3],"IP节点":text_temp[4],"IP占比":text_temp[5],})#print(CDN_Manufacturer)    
#a_list =  page_element.find_elements(By.TAG_NAME,"a")
for mdn_ms in CDN_Manufacturer:#divs =  mdn_ms.find_elements(By.XPATH,"//div")passdf = pd.DataFrame(CDN_Manufacturer)# 将数据保存为CSV文件
df.to_csv('CDN_Manufacturer.csv', index=False)print("数据已保存为CSV文件")

pd 直接打印 生成结果

数据已保存为CSV文件公司名称                                      官网地址  ...    IP节点   IP占比
0     百度云加速  https://cloud.baidu.com/product/cdn.html  ...   92100   4.7%
1       阿里云                   https://www.aliyun.com/  ...  238994  12.3%
2       腾讯云                https://cloud.tencent.com/  ...   57212   2.9%
3   知道创宇云防御                https://www.yunaq.com/jsl/  ...   16333   0.8%
4        网宿            http://www.chinanetcenter.com/  ...   67683   3.5%
..      ...                                       ...  ...     ...    ...
67    睿江CDN                       http://www.efly.cc/  ...       1   <0.1
68    领智云画科              http://www.linkingcloud.com/  ...       6   <0.1
69     郑州珑凌                    http://www.lonlife.cn/  ...       1   <0.1
70   中国联合网络                    http://www.wocloud.cn/  ...       2   <0.1
71   极兔云CDN                  https://www.jitucdn.com/  ...       9   <0.1

数据可视化

通过 pyecharts 对数据做简单可视化

def to_echarts(CDN_Manufacturer):from pyecharts.charts import Barfrom pyecharts import options as opts# 内置主题类型可查看 pyecharts.globals.ThemeTypefrom pyecharts.globals import ThemeTypexaxis =  [ cdn["公司名称"] for cdn in   CDN_Manufacturer ][:10]yaxis1 =  [ cdn["CDN网站数量"] for cdn in   CDN_Manufacturer ][:10]yaxis2 =  [ cdn["IP节点"] for cdn in   CDN_Manufacturer ][:10]bar = (Bar(init_opts=opts.InitOpts(theme=ThemeType.LIGHT)).add_xaxis(xaxis).add_yaxis("CDN网站数量", yaxis1).add_yaxis("IP节点", yaxis2).set_global_opts(title_opts=opts.TitleOpts(title="主标题", subtitle="副标题"))
)  bar.render()

在这里插入图片描述

也可以考虑其他一些可视化工具

Matplotlib:Matplotlib 是 Python 中最常用的数据可视化库之一,提供了广泛的绘图功能,包括折线图、散点图、柱状图、饼图等。它可以用于创建静态图表和交互式图形,并且可以高度定制。

Seaborn:Seaborn 是基于 Matplotlib 的统计数据可视化库,专注于统计图表和信息可视化。Seaborn 提供了更高级的统计图表类型,并具有更好的默认样式和颜色主题。

Plotly:Plotly 是一个交互式可视化库,可创建高度定制化的图表和可视化界面。Plotly 提供了丰富的图表类型,包括折线图、散点图、柱状图、热力图等,并支持创建交互式的仪表盘和可视化应用。

Bokeh:Bokeh 是一个用于创建交互式图表和可视化的库,具有强大的绘图能力和跨平台的支持。Bokeh 可以生成 HTML、JavaScript 和 WebGL,从而实现跨浏览器和跨设备的可视化。

Altair:Altair 是一个声明式的数据可视化库,使用简单的 Python 语法生成可视化图表。Altair 基于 Vega-Lite 规范,具有清晰的语法和简洁的API。

博文部分内容参考

© 文中涉及参考链接内容版权归原作者所有,如有侵权请告


<pyecharts: https://pyecharts.org/#/zh-cn/quickstart>

<Matplotlib: https://github.com/matplotlib/matplotlib>

<Seaborn: https://github.com/seaborn/seaborn>

<Plotly: https://github.com/plotly/plotly.py>

<Bokeh: https://github.com/bokeh/bokeh>

<Altair: https://github.com/altair-viz/altair>


© 2018-2023 liruilonger@gmail.com, All rights reserved. 保持署名-非商用-相同方式共享(CC BY-NC-SA 4.0)

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ArcGIS API开发介绍

本来想自己总结写一下的&#xff0c;但是发现有个网站总结的特别好。所以直接给大家分享一下地址&#xff1a; 起步 - Start | ArcGis中文网 当然系统性的学习和使用还的看官网文档Quick Links | API Reference | ArcGIS Maps SDK for JavaScript 4.27 | ArcGIS Developers …

jvm 什么是常量池,常量池定义 class常量池

首先需要理解下Java的class文件&#xff0c;以及class文件结构&#xff1a; 1.Class文件是一组以8个字节为基础单位的二进制流&#xff0c;各个数据项目严格按照顺序紧凑地排列在文 件之中&#xff0c;中间没有任何分隔符&#xff0c;这使得整个Class文件中存储的内容几乎全部…

Sloare flare网卡信息

详细的安装信息 https://github.com/Xilinx-CNS/onload/tree/master/scripts 进行下载 Solarflare网卡开发&#xff1a;openonload 安装与调试_openonload安装_Erice_s的博客-CSDN博客 cns-sfnettest测试 cns-sfnettest 下载 https://github.com/Xilinx-CNS/cns-sfnettes…

什么是字体图标(Icon Font)?如何在网页中使用字体图标?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 字体图标&#xff08;Icon Font&#xff09;⭐ 如何在网页中使用字体图标⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅&a…

rust库学习-env_logger(actix-web添加彩色日志、rust添加彩色日志 )

文章目录 介绍actix-web启用彩色日志crate地址&json格式日志 我们在进行rust的web开发时&#xff0c;如果不指定日志&#xff0c;就不会有输出&#xff0c;非常不友好 这里我们使用env_logger进行日志打印 介绍 env_logger 需要配合 log 库使用, env_logger 是 Rust 社区…

3.2 数据的表现形式及其运算

3.2.1 常量和变量 在计算机高级语言中&#xff0c;数据有两种表现形式&#xff1a;常量和变量。 1.常量 在程序运行过程中&#xff0c;其值不能被改变的量称为常量。如例3.1程序中的5,9,32和例3.2程序中的1000,0.0036,0.0225,0.0198是常量。数值常量就是数学中的常数。 常用的…

《机器学习核心技术》分类算法 - 决策树

「作者主页」&#xff1a;士别三日wyx 「作者简介」&#xff1a;CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」&#xff1a;小白零基础《Python入门到精通》 决策树 1、决策树API2、决策时实际应用2.1、获取数据集2.2、划分数据集2.3、决策…

设计模式之九:迭代器与组合模式

有许多方法可以把对象堆起来成为一个集合&#xff08;Collection&#xff09;&#xff0c;比如放入数组、堆栈或散列表中。若用户直接从这些数据结构中取出对象&#xff0c;则需要知道具体是存在什么数据结构中&#xff08;如栈就用peek&#xff0c;数组[]&#xff09;。迭代器…

自动设置服务器全教程

亲爱的爬虫探险家&#xff01;在网络爬虫的世界里&#xff0c;自动设置代理服务器是一个非常有用的技巧。今天&#xff0c;作为一家代理服务器供应商&#xff0c;我将为你呈上一份轻松实用的教程&#xff0c;帮助你轻松搞定爬虫自动设置代理服务器。 一、为什么需要自动设置代…

【VsCode】SSH远程连接Linux服务器开发,搭配cpolar内网穿透实现公网访问(1)

文章目录 前言1、安装OpenSSH2、vscode配置ssh3. 局域网测试连接远程服务器4. 公网远程连接4.1 ubuntu安装cpolar内网穿透4.2 创建隧道映射4.3 测试公网远程连接 5. 配置固定TCP端口地址5.1 保留一个固定TCP端口地址5.2 配置固定TCP端口地址5.3 测试固定公网地址远程 前言 远程…

python编写四画面同时播放swap视频

当代技术让我们能够创建各种有趣和实用的应用程序。在本篇博客中&#xff0c;我们将探索一个基于wxPython和OpenCV的四路视频播放器应用程序。这个应用程序可以同时播放四个视频文件&#xff0c;并将它们显示在一个GUI界面中。 C:\pythoncode\new\smetimeplaymp4.py 准备工作…

GWO-LSTM交通流量预测(python代码)

使用 GWO 优化 LSTM 模型的参数&#xff0c;从而实现交通流量的预测方法 代码运行版本要求 1.项目文件夹 data是数据文件夹&#xff0c;data.py是数据归一化等数据预处理脚本 images文件夹装的是不同模型结构打印图 model文件夹 GWO-LSTM测试集效果 效果视频&#xff1a;GWO…