Pandas一键爬取解析代理IP与代理IP池的维护

目录

前言

一、获取代理IP

二、解析代理IP

三、维护代理IP池

四、完整代码

总结


前言

在爬虫过程中,我们经常会使用代理IP来绕过一些限制,比如防止被封IP等问题。而代理IP的获取和维护是一个比较麻烦的问题,需要花费一定的时间和精力。在Python中,使用Pandas库可以非常方便地实现代理IP的获取和维护,本文将详细介绍如何使用Pandas一键爬取解析代理IP并维护代理IP池。

一、获取代理IP

首先我们需要从代理IP网站获取代理IP,代理IP网站有很多,本文以西刺代理为例。

我们可以使用requests库发起一个GET请求,获取代理IP网站的源码。针对站大爷代理,其代理IP信息都被包含在table标签中,我们可以使用Pandas库对其进行解析。另外,西刺代理网站还提供了一些筛选条件,我们也可以用requests库模拟筛选条件的POST请求,将代理IP筛选出来。

代码如下:

import requests
import pandas as pd
from bs4 import BeautifulSoup

def get_ip_pool(url):
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'
    }
    # 获取代理IP网站的源码
    res = requests.get(url, headers=headers)
    res.encoding = 'utf-8'
    soup = BeautifulSoup(res.text, 'html.parser')
    # 获取代理IP信息
    table = soup.find('table', {'id': 'ip_list'})
    df = pd.read_html(str(table))[0]
    # 筛选出有效的代理IP
    df = df[(df['类型'].isin(['HTTP', 'HTTPS'])) & (df['存活时间'].str.contains('天') | df['存活时间'].str.contains('小时') | df['存活时间'].str.contains('分钟'))]
    # 将DataFrame转换为列表
    ip_list = df[['IP地址', '端口号']].values.tolist()
    return ip_list

二、解析代理IP

我们已经获取到了代理IP,接下来需要对其进行解析。

代理IP的形式一般为:IP地址:端口号,我们需要将其拆分为IP地址和端口号两部分。可以使用str.split()函数将其拆分。

代码如下:

def parse_ip(ip_list):
    # 解析代理IP
    parsed_ip_list = []
    for ip in ip_list:
        parsed_ip_list.append(tuple(ip.split(':')))
    return parsed_ip_list

三、维护代理IP池

代理IP池是由一组可用的代理IP组成的集合,为了保证代理IP池的可用性,我们需要定时检测代理IP的可用性,并对不可用的代理IP进行删除。

我们可以使用requests库发起一个GET请求,以www.baidu.com为例,检测代理IP的可用性。如果响应状态码为200,则表示代理IP可用,否则代理IP不可用。

代码如下:

def check_ip(ip):
    # 检测代理IP可用性
    proxies = {
        'http': 'http://' + ':'.join(ip),
        'https': 'https://' + ':'.join(ip)
    }
    try:
        res = requests.get('https://www.baidu.com', proxies=proxies, timeout=5)
        if res.status_code == 200:
            return True
        else:
            return False
    except:
        return False

def maintain_ip_pool(ip_pool):
    # 维护代理IP池
    valid_ip_pool = []
    for ip in ip_pool:
        if check_ip(ip):
            valid_ip_pool.append(ip)
    return valid_ip_pool

四、完整代码

import requests
import pandas as pd
from bs4 import BeautifulSoup

def get_ip_pool(url):
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'
    }
    # 获取代理IP网站的源码
    res = requests.get(url, headers=headers)
    res.encoding = 'utf-8'
    soup = BeautifulSoup(res.text, 'html.parser')
    # 获取代理IP信息
    table = soup.find('table', {'id': 'ip_list'})
    df = pd.read_html(str(table))[0]
    # 筛选出有效的代理IP
    df = df[(df['类型'].isin(['HTTP', 'HTTPS'])) & (df['存活时间'].str.contains('天') | df['存活时间'].str.contains('小时') | df['存活时间'].str.contains('分钟'))]
    # 将DataFrame转换为列表
    ip_list = df[['IP地址', '端口号']].values.tolist()
    return ip_list

def parse_ip(ip_list):
    # 解析代理IP
    parsed_ip_list = []
    for ip in ip_list:
        parsed_ip_list.append(tuple(ip.split(':')))
    return parsed_ip_list

def check_ip(ip):
    # 检测代理IP可用性
    proxies = {
        'http': 'http://' + ':'.join(ip),
        'https': 'https://' + ':'.join(ip)
    }
    try:
        res = requests.get('https://www.baidu.com', proxies=proxies, timeout=5)
        if res.status_code == 200:
            return True
        else:
            return False
    except:
        return False

def maintain_ip_pool(ip_pool):
    # 维护代理IP池
    valid_ip_pool = []
    for ip in ip_pool:
        if check_ip(ip):
            valid_ip_pool.append(ip)
    return valid_ip_pool

if __name__ == '__main__':
    url = 'https://www.zdaye.com'
    ip_list = get_ip_pool(url)
    parsed_ip_list = parse_ip(ip_list)
    valid_ip_pool = maintain_ip_pool(parsed_ip_list)
    print(valid_ip_pool)

总结

本文介绍了如何使用Pandas库一键爬取解析代理IP并维护代理IP池。Pandas库是Python中非常强大的数据处理库,可以大大简化数据处理的流程。在实际开发中,我们可以根据实际需求灵活使用Pandas库,提高数据处理效率。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

机器学习/sklearn 笔记:K-means,kmeans++,MiniBatchKMeans

1 K-means介绍 1.0 方法介绍 KMeans算法通过尝试将样本分成n个方差相等的组来聚类,该算法要求指定群集的数量。它适用于大量样本,并已在许多不同领域的广泛应用领域中使用。KMeans算法将一组样本分成不相交的簇,每个簇由簇中样本的平均值描…

Ocam——自由录屏工具~

当我们想要做一些混剪、恶搞类型的视频时,往往需要源影视作品中的诸多素材,虽然可以通过裁减mp4文件的方式来获取片段,但在高画质的条件下,mp4文件本身通常会非常大,长此以往,会给剪辑工作带来诸多不便&…

使用 PowerShell 创建共享目录

在 Windows 中,可以使用共享目录来将文件和文件夹共享给其他用户或计算机。共享目录可以通过网络访问,这使得它们非常适合用于文件共享、协作和远程访问。 要使用 PowerShell 创建共享目录,可以使用 New-SmbShare cmdlet。New-SmbShare cmdl…

arduino入门一:点亮第一个led

void setup() { pinMode(12, OUTPUT);//12引脚设置为输出模式 } void loop() { digitalWrite(12, HIGH);//设置12引脚为高电平 delay(1000);//延迟1000毫秒(1秒) digitalWrite(12, LOW);//设置12引脚为低电平 delay(1000); }

聚观早报 |快手Q3营收;拼多多杀入大模型;Redmi K70E开启预约

【聚观365】11月23日消息 快手Q3营收 拼多多杀入大模型 Redmi K70E开启预约 华为nova 12系列或下周发布 亚马逊启动“AI就绪”新计划 快手Q3营收 财报显示,快手第三季度营收279亿元,同比增长20.8%;期内盈利21.8亿元,去年同期…

2023 年 亚太赛 APMCM (A题)国际大学生数学建模挑战赛 |数学建模完整代码+建模过程全解全析

当大家面临着复杂的数学建模问题时,你是否曾经感到茫然无措?作为2022年美国大学生数学建模比赛的O奖得主,我为大家提供了一套优秀的解题思路,让你轻松应对各种难题。 完整内容可以在文章末尾领取! 问题1 图像处理&am…

免费多域名SSL证书

顾名思义,免费多域名SSL证书就是一种能够为多个域名或子域提供HTTPS安全保护的证书。这意味着,如果您有三个域名——例如example.com、example.cn和company.com,您可以使用一个免费的多域名SSL证书为所有这些域名提供安全保障,而无…

Missing file libarclite_iphoneos.a 问题解决方案

问题 在Xcode 运行项目会报以下错误 File not found: /Applications/Xcode-beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/arc/libarclite_iphoneos.a解决方案 打开URL https://github.com/kamyarelyasi/Libarclite-Files ,下载liba…

解决Android端libc++_shared.so库冲突问题

前言 随着App功能增多,集成的so库也会增多,如果系统中多个so库都使用系统自动生成的libc_shared.so库,如果多个SDK都有该so包,就会出现报错: 解决办法 如果出现该问题,说明您的项目中有多个SDK共同依赖了C标…

什么?Postman也能测WebSocket接口了?

01 WebSocket 简介 WebSocket是一种在单个TCP连接上进行全双工通信的协议。 WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接…

牛客 最小公配数 golang版实现

题目请参考: HJ108 求最小公倍数 题解: 在大的数的倍数里面去找最小的能整除另外一个数的数,就是最小公倍数,按照大的来找,循环次数能够降到很少,提升效率 golang实现: package mainimport ("fmt" )func main() {a : …

电商API接口|电商数据接入|拼多多平台根据商品ID查商品详情SKU和商品价格参数

随着科技的不断进步,API开发领域也逐渐呈现出蓬勃发展的势头。今天我将向大家介绍API接口,电商API接口具备独特的特点,使得数据获取变得更加高效便捷。 快速获取API数据——优化数据访问速度 传统的数据获取方式可能需要经过多个中介环节&…

AI写代码 可以代替人工吗?

近年AI技术非常火热,有人就说,用AI写代码程序员不就都得下岗吗?对此我的回答是否定的,因为AI虽然已经有了编写代码的能力,但它现在的水平大多还仅限于根据业务需求搭建框架,而具体的功能实现还尚且稚嫩&…

【Vue】Node.js的下载安装与配置

目录 一.下载安装 官网: 二.环境变量的配置 三.设置全局路径和缓存路径 四.配置淘宝镜像 五.查看配置 六.使用npm安装cnpm ​ 一.下载安装 官网: https://nodejs.org/en/download 下载完之后,安装的时候一直点next即可&#xff0c…

【C++高阶(四)】红黑树深度剖析--手撕红黑树!

💓博主CSDN主页:杭电码农-NEO💓   ⏩专栏分类:C从入门到精通⏪   🚚代码仓库:NEO的学习日记🚚   🌹关注我🫵带你学习C   🔝🔝 红黑树 1. 前言2. 红黑树的概念以及性质3. 红黑…

第95步 深度学习图像目标检测:Faster R-CNN建模

基于WIN10的64位系统演示 一、写在前面 本期开始,我们学习深度学习图像目标检测系列。 深度学习图像目标检测是计算机视觉领域的一个重要子领域,它的核心目标是利用深度学习模型来识别并定位图像中的特定目标。这些目标可以是物体、人、动物或其他可识…

【追求卓越12】算法--堆排序

引导 前面几节,我们介绍了有关树的数据结构,我们继续来介绍一种树结构——堆。堆的应用场景有很多,比如从大量数据中找出top n的数据;根据优先级处理网络请求;这些情景都可以使用堆数据结构来实现。 什么是堆&#xf…

3.11-容器的资源限制

这一小节我们来看一下如何限制容器的资源,比如CPU和内存。 我们先来看一下对内存的限制。 --memory和--memory-swap这两个参数,如果我们只限定了--memory,没有限定--memory-swap,那么--memory-swap的大小就会和--memory大小一样。…

Cesium实现热力图功能

效果图如下&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdev…

数字化时代的政务服务:构建便捷高效的线上政务大厅

引言&#xff1a; 随着数字化时代的来临&#xff0c;如何通过线上政务大厅搭建一个便捷高效的服务平台&#xff0c;以更好地满足公众需求值得探究。线上政务大厅是政务服务的新方式&#xff0c;但搭建线上政务大厅并不是一件容易的事情&#xff0c;需要精心的规划和设计。 一…
最新文章