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

news2024/9/25 13:14:08

写在前面


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

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


采集流程:

  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")
    pass


df = 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 Bar
    from pyecharts import options as opts
    # 内置主题类型可查看 pyecharts.globals.ThemeType
    from pyecharts.globals import ThemeType
    xaxis =  [ 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.coloradmin.cn/o/921897.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

openresty安装与网站发布

文章目录 安装依赖下载安装包解压安装包安装启动nginx配置环境变量配置开机启动发布静态网站 OpenResty 是一个基于 Nginx 与 Lua 的高性能 Web 平台&#xff0c;其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动…

Kafka系列:查看Topic列表、消息消费情况、模拟生产者消费者

1、查看kafka队列中topic信息 1.1、查看所有topic ./kafka-topics.sh --zookeeper 10.128.106.52:2181 --list1.2、查看kafka中指定topic的详情 ./kafka-topics.sh --zookeeper 10.128.106.52:2181 --topic ai_jl_analytic --describe2、查看消费者consumer的group列表 2.1…

2022版 的IDEA创建一个maven项目(超详细)

一.设置idea中指定的maven的位置以及本地存储仓库 开发中一般我们使用自己下载的maven&#xff0c;不使用IDEA工具自带的&#xff0c;这就需要将我们下载的maven配置到IDEA工具中&#xff0c;配置如下图所示&#xff1a; 或者直接 快捷键 CtrlAltS 直接进入设置 maven home pa…

MPLS——多协议标签交换

多协议&#xff1a;可以基于多种不同的2层协议和3层协议来生成2.5层的标签信息&#xff1b; 标签交换&#xff1a; 数据包在进入到的MPLS的域内后&#xff0c;将在第2层和3层中间压入标签号&#xff1b;使得域内的路由器在转发该数据包时&#xff0c;基于2.5层的标签号仅需要查…

【TypeScript】装饰器 Decorator

装饰器&#xff08;Decorators&#xff09;是 TypeScript 中一种特殊的语法&#xff0c;用于在类、方法、属性等元素上附加元数据或修改其行为。装饰器提供了一种在不改变类的定义的情况下&#xff0c;对类进行扩展或修改的方式。 装饰器的使用类似于注解&#xff0c;在代码中…

胖小酱之我没全抄

如果你在考试中抄袭同桌的答案被发现&#xff0c;这是一个严重的违规行为&#xff0c;可能会对你的成绩和未来的学业产生不利影响。以下是一些应对这种情况的建议&#xff1a;1. 承认错误&#xff1a;首先&#xff0c;你需要承认自己的错误&#xff0c;并向老师道歉。你可以向老…

矢量图层中要素的几何特征和属性特征的访问

打开QGIS Desktop 3.22.16&#xff0c;加载一个矢量图&#xff08;Ex48/area.shp&#xff09; 激活当前矢量图层 layeriface.activeLayer() 获取当前矢量图层矢量数据的个数 from qgis.utils import ifacelayer iface.activeLayer() # 得到当前激活的图层 print(layer.id()…

计算机图形视觉基础

一、环境安装 1、anaconda安装 官网下载&#xff1a;Free Download | Anaconda 2、打开anaconda prompt测试是否安装成功 输入conda env list命令显示虚拟环境清单即可 二、创建开发虚拟环境 1、创建python3.8虚拟环境 conda create --name demo_py3.8 python3.8 2、激…

渠道窜货怎么解决

品牌渠道中的常见问题有哪些&#xff1f; 低价、窜货是品牌需要治理的渠道常见问题&#xff0c;一般说到窜货就会提到低价&#xff0c;因为这两者是密不可分的&#xff0c;低价会带来窜货&#xff0c;窜货也必然有低价的影响&#xff0c;所有违规行为的背后&#xff0c;都是有…

Unity - 制作package 插件包

1.将制作的插件包代码放置一个根目录下 2.在跟目录下创建package.json文件 //package.json {"name": "com.unity.customlibrary", //插件包名:com.组织名.包名"displayName": "CustomLibrary", //显示的插件名"v…

程序员行业有必要考PMP吗?

首先&#xff0c;给大家简单普及一下什么是PMP&#xff1f; PMP(Project Management Professional)指项目管理专业人士&#xff08;人事&#xff09;资格认证。美国项目管理协会&#xff08;PMI&#xff09;举办的项目管理专业人员&#xff08;PMP&#xff09;认证考试在全球1…

海思Hi3861L开发二-SDK编译与下载

一、简介 上篇文章,我们介绍了海思Hi3861L的环境搭建,那这篇文章,我们就开始SDK的编译与下载吧。 准备: SDK:https://download.csdn.net/download/qq_26226375/88245580 开发环境:海思Hi3861L开发一-环境搭建_t_guest的博客-CSDN博客 二、SDK介绍 将SDK解压后,会出现如…

【Java架构-包管理工具】-Maven基础(一)

本文摘要 Maven作为Java后端使用频率非常高的一款依赖管理工具&#xff0c;在此咱们由浅入深&#xff0c;分三篇文章&#xff08;Maven基础、Maven进阶、私服搭建&#xff09;来深入学习Maven&#xff0c;此篇为开篇主要介绍Maven概念、模型、安装配置、基本命令 文章目录 本文…

2023-8-24 模拟堆

题目链接&#xff1a;模拟堆 #include <iostream> #include <string.h>using namespace std;const int N 100010;int h[N], ph[N], hp[N], Size;void heap_swap(int a, int b) {swap(ph[hp[a]], ph[hp[b]]);swap(hp[a], hp[b]);swap(h[a], h[b]); }void down(in…

基于大数据+django+mysql的学习资源推送系统的设计与实现(含报告+源码+指导)

本系统为了数据库结构的灵活性所以打算采用MySQL来设计数据库&#xff0c;而Python技术&#xff0c; B/S架构则保证了较高的平台适应性。文中主要是讲解了该系统的开发环境、要实现的基本功能和开发步骤&#xff0c;并主要讲述了系统设计方案的关键点、设计思想。 由于篇幅限制…

Bigemap软件常见实操疑问解答

工具 Bigemap gis office地图软件 BIGEMAP GIS Office-全能版 Bigemap APP_卫星地图APP_高清卫星地图APP Bigemap gis office 国产地图编辑工具作为一个大众化软件&#xff0c;他的操作其实是相对简单的&#xff0c; 可操作的功能也非常广泛&#xff0c; 所以就会有各行各业…

【uni-app】压缩图片并添加水印

总体思路 dom 结点 这里的 cvHeight 和 cvWidth 初始时要设置为你后续需要压缩后的最大宽高。假设我们在图片上传后图片最大为 350 * 350 <u-upload :fileList"baseInfoFormData.entrustFileList" afterRead"afterFileRead" multiple></u-uploa…

2023前端求职经历回顾及面试题总结

文章目录 前言一、求职经历二、前端面经1. 投简历的正确打开方式2. 面经及面试题复盘外企面经、面试题大厂面经、面试题面试中的笔试有三种笔试题 给同行的温馨提示我的其他热门文章 前言 2023 年的春节之前&#xff0c;几乎没有公司招人&#xff0c;直到 2023年2月10日 左右&a…

科技资讯|苹果Apple Watch新专利,可根据服装、表带更换表盘颜色

根据美国商标和专利局&#xff08;USPTO&#xff09;公示的清单&#xff0c;苹果公司近日获得了一项 Apple Watch 相关的技术专利&#xff0c;最大的亮点在于配备颜色采样传感器&#xff0c;可以根据表带、服装自动变幻变盘颜色和主题。 Apple Watch 正面配备颜色采样传感器&am…

Python快速入门体验

Python快速入门体验 一、环境信息1.1 硬件信息1.2 软件信息 二、Conda安装2.1 Conda介绍2.1.1 Conda简介2.1.2 Conda、Anaconda及Miniconda及的关系 2.2 Conda安装包下载2.2.1 Miniconda下载2.2.2 Anconda下载 2.3 Conda安装2.3.1 Miniconda安装2.3.2 Anconda安装 2.4 Conda初始…