当前位置: 首页 > news >正文

数据采集:selenium 获取 CDN 厂家各省市节点 IP

写在前面


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

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


逻辑相对简单,主要通过 站长之家 https://cdn.chinaz.com/,获取全国省市的 CDN节点 IP 信息

采集流程:

  1. 获取CDN 厂家信息

在这里插入图片描述

  1. 跳转页面到指定的厂家,择需要获取的省份

在这里插入图片描述

  1. 获取当前页IP,循环处理分页数据

在这里插入图片描述

  1. 处理完当前省份,循环跳转其他省份处理
  2. 处理完当前厂家,循环处理其他厂家

代码:

#!/usr/bin/env python
# -*- encoding: utf-8 -*-
"""
@File    :   cdn_data_dns.py
@Time    :   2023/08/21 21:46:47
@Author  :   Li Ruilong
@Version :   1.0
@Contact :   liruilonger@gmail.com
@Desc    :   省市CDN 节点IP数据获取
"""# here put the import libfrom seleniumwire import webdriver
import json
import time
from selenium.webdriver.common.by import By
import pandas as pd
import reip_pattern = r"\b(?:\d{1,3}\.){3}\d{1,3}\b"# 自动登陆
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_element(By.CSS_SELECTOR, ".ullist")
div_cdn = div_elements.find_elements(By.XPATH,"//a[contains(@href,'server')]")#CDN_Manufacturer.extend(div_elements)current_window_1 = driver.current_window_handle
for i,mdn_ms in enumerate(div_cdn):try:#driver.execute_script("arguments[0].click();", mdn_ms)ip_addresse = []print(mdn_ms.text)cloud_cdn_name = mdn_ms.textmdn_ms.click()time.sleep(2)driver.switch_to.window(driver.window_handles[-1])# 滚动到页面底部driver.execute_script("window.scrollTo(0, document.body.scrollHeight/2)")time.sleep(5)areas_list =  ["安徽", "河北", "河南", "湖北", "湖南", "江西", "陕西", "山西", "四川", "重庆"]for a in areas_list:              areas =  driver.find_element(By.CSS_SELECTOR,"#areas")nmg =  areas.find_element(By.XPATH,"//a/font[contains(text(),'"+a+"')]")nmg.click()time.sleep(2)new_div_element = driver.find_element(By.CSS_SELECTOR, ".box")new_table_element = str(new_div_element.text).split("\n")ip_addresses = re.findall(ip_pattern, str(new_table_element))ip_addresse.extend(ip_addresses)if len(driver.find_elements(By.XPATH,"//a[contains(@title, '尾页')]")) < 2:#driver.close() #driver.switch_to.window(current_window_1)ips = {}ips[cloud_cdn_name] = ip_addressedf = pd.DataFrame(ips)df.to_csv('CDN_M_省份_'+a +'_'+cloud_cdn_name+'.csv', index=False) print("单页数据,数据已保存为CSV文件",'CDN_M_'+a +'_'+cloud_cdn_name+'.csv')  continuesum_page = driver.find_element(By.XPATH,"//a[contains(@title, '尾页')]")attribute_value = sum_page.get_attribute('val')print(attribute_value)current_window_2 = driver.current_window_handlefor page in range(1,int(attribute_value)):try: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, ".box")new_table_element = str(new_div_element.text).split("\n")ip_addresses = re.findall(ip_pattern, str(new_table_element))ip_addresse.extend(ip_addresses)except:print(a,cloud_cdn_name,"没有IP")time.sleep(5)passcontinue    ips = {}ips[cloud_cdn_name] = ip_addressedf = pd.DataFrame(ips)df.to_csv('CDN_M_省份_'+a+'_'+cloud_cdn_name+'.csv', index=False) print("数据已保存为CSV文件",'  CDN_M_省份_'+a+'_'+cloud_cdn_name+'.csv')  except:print(cloud_cdn_name,"没有IP")passcontinuefinally:passdriver.close() driver.switch_to.window(current_window_1)continue

博文部分内容参考

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



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

相关文章:

数据采集:selenium 获取 CDN 厂家各省市节点 IP

写在前面 工作需要遇到&#xff0c;简单整理理解不足小伙伴帮忙指正 对每个人而言&#xff0c;真正的职责只有一个&#xff1a;找到自我。然后在心中坚守其一生&#xff0c;全心全意&#xff0c;永不停息。所有其它的路都是不完整的&#xff0c;是人的逃避方式&#xff0c;是对…...

【el-tree】树形组件图标的自定义

饿了么树形组件的图标自定义 默认样式: 可以看到el-tree组件左侧自带展开与收起图标,咱们可以把它隐藏:: .groupList {::v-deep .el-tree-node { .el-icon-caret-right {display: none;} } } 我的全部代码 <div class"groupList"><el…...

UltralSO软碟通制作Linux系统盘

第一步&#xff1a; 下载镜像 阿里云下载地址&#xff1a;https://mirrors.aliyun.com/centos-vault/ 按照需求选择系统版本&#xff0c;我这要求安装CentOS7.5的系统&#xff0c;我以CentOS7.5为例 第二步&#xff1a; 下载UltralSO软件 官网下载地址&#xff1a;https://cn.…...

yolov8训练心得 持续更新

目录 优化器 lion优化器,学习率0.0001,训练效果: 学习率衰减 600个batch衰减0.7,发现效果较好...

超越界限:大模型应用领域扩展,探索文本分类、文本匹配、信息抽取和性格测试等多领域应用

超越界限&#xff1a;大模型应用领域扩展&#xff0c;探索文本分类、文本匹配、信息抽取和性格测试等多领域应用 随着 ChatGPT 和 GPT-4 等强大生成模型出现&#xff0c;自然语言处理任务方式正在逐步发生改变。鉴于大模型强大的任务处理能力&#xff0c;未来我们或将不再为每…...

Compose - 基本使用

一、概念 1.1 Compose优势 由一个个可以组合的Composable函数拼成界面&#xff0c;方便维护和复用。布局模型不允许多次测量&#xff0c;提升了性能。Compose可以和View互操作&#xff08;相互包含对方&#xff09;。 1.2 声明式UI APP展示的数据绝大多数不是静态数据而是会…...

Unity3D Pico VR 手势识别

本文章使用的 Unity3D版本: 2021.3.6 , Pico SDK 230 ,Pico OS v.5.7.1 硬件Pico 4 Pico SDK可以去Pico官网下载SDK 导入SDK 第一步&#xff1a;创建Unity3D项目 第二步&#xff1a;导入 PICO Unity Integration SDK 选择 Windows > Package Manager。 在 Packag…...

【docker】运行registry

registry简介 Docker registry是docker镜像仓库的服务,用于存储和分发docker镜像。 Docker registry主要特点和功能: 存储docker镜像:提供持久化存储docker镜像的功能,存储镜像的各个layer。 分发镜像:拉取和推送镜像的去中心化存储和分发服务。 支持版本管理:给镜像打标签…...

java八股文面试[Spring]——如何实现一个IOC容器

什么是IOC容器 IOC不是一种技术&#xff0c;只是一种思想&#xff0c;一个重要的面向对象编程的法则&#xff0c;它能指导我们如何设计出松耦合&#xff0c;更优良的程序。传统应用程序都是由我们在类内部主动创建依赖对象&#xff0c;从而导致类与类之间高耦合&#xff0c;难于…...

Redis 列表 | Navicat

在最近的博客 文章 中&#xff0c;我们已经了解了 Redis 的六种数据类型。其中&#xff0c;Redis 列表&#xff08;List&#xff09;包含一组字符串&#xff0c;他们按照被添加的顺序进行排序。本文将就列表数据类型进行展开介绍&#xff0c;并且重点介绍一些主要的命令来管理它…...

【校招VIP】测试专业课之TCP/IP模型

考点介绍&#xff1a; 大厂测试校招面试里经常会出现TCP/IP模型的考察&#xff0c;TCP/IP协议是网络基础知识&#xff0c;但是在校招面试中很多同学在基础回答中不到位&#xff0c;或者倒在引申问题里&#xff0c;就丢分了。 『测试专业课之TCP/IP模型』相关题目及解析内容可点…...

leetcode76. 最小覆盖子串(滑动窗口-java)

滑动窗口 最小覆盖子串滑动窗口代码 上期经典 最小覆盖子串 难度 - 困难 原题链接 - 最小覆盖字串 给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串&#xff0c;则返回空字符串 “” 。 注意&#xff1a; 对于 t…...

后端项目开发:整合全局异常处理

新建exception目录&#xff0c;用来进行自定义的全局异常处理。 &#xff08;1&#xff09;新建自定义的GlobalException基 类继承RuntimeException类&#xff0c;我们自定义的异常类全部需要继承GlobalException基类进行处理。 这里我们直接利用之前定义的错误码接口类。 /…...

Linux socket网络编程概述 和 相关API讲解

socket网络编程的步骤 大体上&#xff0c;连接的建立过程就是&#xff1a;服务器在确定协议类型后&#xff0c;向外广播IP地址和端口号&#xff0c;并监听等待&#xff0c;直到客户端获取了IP地址和端口号并成功连接&#xff1a; 使用socket来进行tcp协议的网络编程的大体步骤…...

uni-app封装省市区下拉组件(后台获取数据)

一.后台数据格式 PROCINCE:[{itemName:,itemValue:}] CITY:[{itemName:,itemValue}] AREA:[{itemName:,itemValue}] 前端将地址数据缓存在了pinia中 前端主要使用picker进行勾选 二.代码 <template><picker change"bindPickerChange" columnchange"…...

laravel中Mail发送邮件失败,但是没有错误信息,该如何调试?

在Laravel中&#xff0c;当使用Mail类发送邮件失败但没有错误信息显示时&#xff0c;可以按照以下步骤进行调试&#xff1a; 检查日志文件&#xff1a; Laravel会记录各种应用程序活动和错误信息。查看应用程序的日志文件&#xff0c;通常位于storage/logs目录下&#xff0c;寻…...

软考高级系统架构设计师系列论文八十五:论软件产品线技术

软考高级系统架构设计师系列论文八十五:论软件产品线技术 一、摘要二、正文三、总结一、摘要 根据“十五”国防科技重点实验室—“机载XXPD火控雷达性能开发与评估实验室”的建设需求。我所在的中国x集团公司x所电子对抗研究部组织了用于该实验室目布式联网试验,主要任务是试…...

More Effective C++学习笔记(4)

目录 条款16&#xff1a;谨记 80 - 20 法则条款17&#xff1a;考虑使用lazy evaluation&#xff08;缓式评估&#xff09;条款18&#xff1a;分期摊还预期的计算成本条款19&#xff1a;了解临时对象来源条款20&#xff1a;协助完成 “ 返回值优化 ”条款21&#xff1a;利用重载…...

概率密度函数 累积分布函数

概率密度函数&#xff1a;是指想要求得面积的图形表达式&#xff0c;注意只是表达式&#xff0c;要乘上区间才是概率&#xff0c;所以概率密度并不是概率&#xff0c;而是概率的分布程度。 为什么要引入概率密度&#xff0c;可能是因为连续变量&#xff0c;无法求出某个变量的…...

基于OpenCV实战(基础知识二)

目录 简介 1.ROI区域 2.边界填充 3.数值计算 4.图像融合 简介 OpenCV是一个流行的开源计算机视觉库&#xff0c;由英特尔公司发起发展。它提供了超过2500个优化算法和许多工具包&#xff0c;可用于灰度、彩色、深度、基于特征和运动跟踪等的图像处理和计算机视觉应用。Ope…...

Python3+bypy实战:给你的服务器加个百度网盘自动备份脚本

Python3bypy实战&#xff1a;构建服务器自动化备份系统 在数据为王的时代&#xff0c;服务器上的关键数据如同数字生命线。想象一下凌晨三点收到数据库崩溃的告警&#xff0c;却发现最后一次备份是两周前的手动快照——这种噩梦般的场景正是自动化备份要消灭的敌人。本文将带你…...

STM32CubeMX外部中断实战:从按键消抖到LED状态切换

1. STM32CubeMX外部中断基础配置 第一次用STM32CubeMX配置外部中断时&#xff0c;我盯着那一堆选项有点懵。后来发现其实只要抓住几个关键点&#xff0c;整个过程就像搭积木一样简单。这里以最常见的按键控制LED为例&#xff0c;带你一步步实现这个功能。 首先打开CubeMX新建…...

搜极星破局:拆解企业 “看不见、控不住、比不过” 困局

引言&#xff1a;AI 时代&#xff0c;企业陷入三重信息绝境2026 年&#xff0c;生成式 AI 全面主导用户决策链路&#xff0c;品牌竞争从搜索排名转向 AI 认知权重。但多数企业正深陷看不见、控不住、比不过的三重困局&#xff1a;看不见自身在 AI 平台的真实曝光状态&#xff0…...

别再只懂PCA了!用Python手写LDA,从鸢尾花分类实战看监督降维的威力

别再只懂PCA了&#xff01;用Python手写LDA&#xff0c;从鸢尾花分类实战看监督降维的威力 鸢尾花数据集在机器学习领域就像"Hello World"之于编程——经典、简洁却蕴含丰富可能性。当大多数人用PCA处理这类数据时&#xff0c;我们往往忽略了数据本身携带的宝贵标签信…...

Midjourney输出≠成品!树莓派自动裁切+水印+背胶封装印相工作流(附GitHub开源项目+硬件BOM清单)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Midjourney输出≠成品&#xff01;树莓派自动裁切水印背胶封装印相工作流&#xff08;附GitHub开源项目硬件BOM清单&#xff09; Midjourney生成的高分辨率图像只是创作起点&#xff0c;真正交付实体印…...

无人机雷达与LiDAR协同监测土壤湿度技术解析

1. 无人机雷达与LiDAR协同监测土壤湿度的技术原理在精准农业领域&#xff0c;土壤湿度监测一直面临着植被遮挡带来的技术挑战。传统的地面传感器网络虽然精度较高&#xff0c;但存在部署成本高、维护困难等问题&#xff1b;而光学遥感又难以穿透茂密的作物冠层。无人机载雷达与…...

中国移联AI元宇宙产业委调研阿尔特汽车科技园 构建高精尖产业的“技术-场景-商业”融合生态

&#xff08;央链知播 北京讯&#xff09; 5月7日&#xff0c;中国移动通信联合会人工智能与元宇宙产业工作委员会&#xff08;简称“中国移联AI与元宇宙产业委”&#xff09;、中国移动通信联合会数字文化与智慧教育分会、中国通信工业协会区块链专业委员会等机构秘书长何超带…...

ARMv8 A64指令集SIMD与浮点运算优化指南

1. A64指令集SIMD与浮点运算架构解析在ARMv8架构中&#xff0c;A64指令集的SIMD&#xff08;单指令多数据流&#xff09;和浮点运算单元构成了高性能计算的核心引擎。这套指令集的设计体现了现代处理器架构中数据级并行&#xff08;DLP&#xff09;的精髓——通过单条指令同时处…...

Armv8-A架构缓存维护指令详解与应用实践

1. A64系统指令中的缓存维护操作概述在Armv8-A架构中&#xff0c;缓存维护操作是确保系统内存一致性的关键机制。作为体系结构设计中最精妙的部分之一&#xff0c;缓存维护指令直接操控处理器缓存层次结构的状态&#xff0c;对系统性能、功能正确性和安全性都有着决定性影响。现…...

构建个人代码知识库:codesift工具的设计理念与高效实践

1. 项目概述&#xff1a;从代码仓库到个人知识库的进化最近在整理自己过去几年写过的代码片段、工具脚本和项目配置时&#xff0c;发现了一个普遍存在的痛点&#xff1a;这些零散的“智慧结晶”散落在硬盘的各个角落、不同的Git仓库里&#xff0c;甚至有些只存在于模糊的记忆中…...