Python 采集免费代理,并检测其是否可用

news2024/9/24 1:18:16

本篇博客将采集互联网中公开代理 IP,并通过 IP 检测站点检测代理的可用性。
未来该内容将会被集成到 爬虫训练场 中。

💰学习目录💰

    • Python 采集免费代理 IP
      • 模块准备与目标站点说明
      • 实战采集
    • 代理 IP 可用性检测
      • 对接站点
      • 为何使用代理 IP,依旧展示原 IP

Python 采集免费代理 IP

模块准备与目标站点说明

本次案例实战用到的 Python 第三方模块是 requestslxml,从技术难度的角度看属于入门级爬虫。

目标站点为:kuaidaili.com,其每日更新部分高匿名代理,可用于测试。

Python 采集免费代理,并检测其是否可用

实战采集

先看一下目标页面代码采集的完整案例,然后再进行分析。

def get_proxy_list(i):
    url = f"https://www.kuaidaili.com/free/inha/{i}/"

    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36"
    }
    response = requests.request("GET", url, headers=headers)
    res = []
    elements = etree.HTML(response.text)
    type_dct = {
        "HTTP": "http://",
        "HTTPS": "https://"
    }
    data_list = elements.xpath("//tbody/tr")
    for data in data_list:
        ip = data.xpath("./td[1]/text()")[0]
        port = data.xpath("./td[2]/text()")[0]
        type = data.xpath("./td[4]/text()")[0]
        res.append(type_dct[type] + ip + ':' + port)
    return res

get_proxy_list() 函数接收页码参数,将其拼接到 url 中,然后使用 requests.request() 方法构造请求,这里直接使用 requests.get() 也是可以的。

得到数据相应之后,直接采用 etree.HTML(response.text) 进行格式化操作,然后通过 xpath 将目标信息提取出来,存放到 res 列表中进行返回。

Python 采集免费代理,并检测其是否可用

代理 IP 可用性检测

对接站点

检测代理 IP 是否可以,我们会使用到下述两个站点:

  • https://ipv4.icanhazip.com/
  • http://httpbin.org/ip

直接访问上述站点,都会得到如下内容,即展示你本地 IP 信息。

Python 采集免费代理,并检测其是否可用
我们接下来通过 requests 模块设置代理 IP 访问上述站点,查看代理 I 怕是否可用。

def check(proxy):
    href = 'https://ipv4.icanhazip.com'
    # href = 'http://httpbin.org/ip'
    if 'https' in proxy:
        proxies = {'https': proxy}
    else:
        proxies = {'http': proxy}
    headers = {
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4396.0 Safari/537.36'
    }
    try:
        r = requests.get(href, proxies=proxies, timeout=3, headers=headers)
        print(r.content)
        if r.status_code == 200:
            return True
    except:
        return False

上述代码最核心的是 requests.get(),其中 proxies 参数设置为代理,timeout 设置请求超时时间,最后修改 main 入口函数部分代码。

if __name__ == '__main__':
    for i in range(1, 5):

        proxy_list = get_proxy_list(i)

        print(proxy_list)
        for p in proxy_list:
            print(p, check(p))

再次运行代码,得到代理 IP 的状态。

如何代理 IP 可用,返回 True,否则返回 Flase。

Python 采集免费代理,并检测其是否可用

实战中,会出现下述问题。

为何使用代理 IP,依旧展示原 IP

这个其实很好解释,免费代理并不是高匿名的,虽然免费站点会标记 IP 为高匿名代理,但这个不绝对。

如果我们使用的不是【真】高匿代理,那展示的就是你的真实 IP,检测代理 IP 还可以用 httpbin.org/ip ,这个站点没有设置反代理。

如果希望实现绝对的安全,可以使用 VPN 或者代理服务器进行请求,结果就会展示为你的代理 IP。

📢📢📢📢📢📢
💗 你正在阅读 【梦想橡皮擦】 的博客
👍 阅读完毕,可以点点小手赞一下
🌻 发现错误,直接评论区中指正吧
📆 橡皮擦的第 849 篇原创博客

全网 6000+人正在学习的 爬虫专栏 👇👇👇👇

  • ⭐️ Python 爬虫 120,点击订购 ⭐️
  • ⭐️ 爬虫 100 例教程,点击订购 ⭐️

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

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

相关文章

9. 使用SMTP发送邮件

1. SMTP协议 SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议, 它是一组用于传送邮件的规则,由它来控制信件的中转方式。 SMTP是发送邮件的协议,python内置对SMTP的支持,可以发送纯文本邮件、HTML邮件以及带附…

python学习 --- 字符串基础

目录 一、字符串的驻留机制 1、驻留机制 2、驻留机制的几种情况(使用交互模式) 3、强制驻留 4、字符串驻留机制的优缺点 二、字符串的常用操作 1、字符串的查询操作 2、字符串大小写转换操作 3、字符串内容对齐操作 4、字符串劈分操作 5、判断…

【c语言进阶】动态内存管理知识大全(下)

🚀write in front🚀 📜所属专栏c语言学习 🛰️博客主页:睿睿的博客主页 🛰️代码仓库:🎉VS2022_C语言仓库 🎡您的点赞、关注、收藏、评论,是对我最大的激励和…

AxMath使用教程+常用符号与公式(持续更新中)

前言 这两天学了学Latex,主要是为了以后写毕业论文做铺垫,而且Latex在数学公式这一方面,要比Word方便许多,于是我就下载了一款国产的公式编辑器——AxMath。永久会员不贵,只要36元,而且软件很好用&#xf…

vue全家桶(一)基础知识

vue全家桶(一)1.vue基本使用2.vue模板语法1.差值表达式2.指令1.什么是指令2.数据绑定指令3.双向数据绑定4.事件绑定4.1click4.2事件修饰符4.3按键修饰符4.4属性绑定4.5-指令v-model的本质4.6 样式绑定4.6.1 class样式处理4.6.2 style样式处理4.7 分支循环…

Pytorch深度强化学习案例:基于DQN实现Flappy Bird游戏与分析

目录1 案例介绍2 构造深度Q网络3 经验回放与目标网络4 训练流程5 实验分析1 案例介绍 Flappy Bird是一款由来自越南的独立游戏开发者Dong Nguyen所开发的作品,于2013年5月24日上线。 在Flappy Bird中,玩家只需要用一根手指来操控:点击一次屏…

P49 BFC 块级格式化上下文 块级格式化上下文 BFC渲染区域: 创建BFC的元素,它的自动高度需要计算浮动元素. 高度塌陷例子

目录块级格式化上下文BFC渲染区域:创建BFC的元素,它的自动高度需要计算浮动元素.高度塌陷例子:第一种方法 clearfix::after第二种解决办法 :绝对定位第三种解决办法:overflow: scroll;第四种方法:clearfix hidden创建BFC的元素&am…

21版本FL Studio水果音乐制作软件下载

因为对音乐有一些了解,所以周边有不少朋友会问我很多关于音乐的问题,其中比较多是学习音乐到底用哪款软件比较好。每次遇到这样的问题,我都会告诉他们,就是我一直在用的音乐制作软件FL Studio。音乐制作软件FL Studio,…

【JavaGuide面试总结】Java集合篇·中

【JavaGuide面试总结】Java集合篇中1.Collection 子接口之 SetComparable 和 Comparator 的区别比较 HashSet、LinkedHashSet 和 TreeSet 三者的异同2.Collection 子接口之 QueueQueue 与 Deque 的区别ArrayDeque 与 LinkedList 的区别说一说 PriorityQueue3.Map 接口HashMap 的…

机器学习(八):深度学习简介

文章目录 深度学习简介 一、神经网络简介 二、深度学习各层负责内容 深度学习简介 一、神经网络简介 深度学习(Deep Learning)(也称为深度结构学习【Deep Structured Learning】、层次学习【Hierarchical Learning】或者是深度机器学习【…

React中commit阶段发生了什么

对于commit阶段的主要工作是循环effectList链表去将有更新的fiber节点应用到页面上是commit的主要工作。 EffectList 什么是副作用? 函数在执行过程中对外部造成的影响可以称之为副作用,副作用包含的类型很多,比如说标记值为Placement时&a…

客快物流大数据项目(一百零九):Spring Boot概述

文章目录 Spring Boot概述 一、什么是SpringBoot 二、​​​​​​​为什么要学习Spring Boot

PHP转Go实践:xjson解析神器「开源工具集」

前言 近期会更新一系列开源项目的文章,新的一年会和大家做更多的开源项目,也欢迎大家加入进来。 xutil 今天分享的文章源自于开源项目jinzaigo/xutil的封装。 在封装过程中,劲仔将实现原理以及相关实践思考,写成文章分享出来&am…

Python3学习——条件控制、循环语句与迭代器

目录 一、编程第一步——斐波那契数列 二、条件控制 (一)if/else语句 判断狗狗的年龄: (二)多层if/else嵌套 判断数字能否被2或3整除: (三)match...case匹配——python3中新增 根据数字判断星期: 三、循环语句 (一)while循环 1.循环…

Java:Idea创建项目和Spring工程基本使用

一、创建项目 1、创建新的空的项目: Empty Project–next 2、定义项目的名称,并指定位置 3、对项目进行设置,JDK版本、编译版本 4、添加模块信息 5、修改maven路径 6、项目目录结构 二、搭建Spring的框架 1、在核心配置文件中添加Spring的j…

C++11 并发指南五(stdcondition_variable 详解)

C11 并发指南五(std::condition_variable 详解) 文章目录C11 并发指南五(std::condition_variable 详解)std::condition_variable 类介绍std::condition_variable_any 介绍std::cv_status 枚举类型介绍std::notify_all_at_thread_exit前面三讲《 C11 并发指南二(std::thread 详…

二叉树简单解析(1)

🍀本人简介: 吉师大一最爱逃课的混子、 华为云享专家、阿里云专家博主、腾讯云自媒体分享计划博主、 华为MindSpore优秀开发者、迷雾安全团队核心成员,CSDN2022年运维与安全领域第15名 🍁本人制作小程序以及资源分享地址&#x…

英语学习打卡day7

2023.1.27 1.ironically adv.具有讽刺意味的是;反讽地,讽刺地 Ironically, his cold got better on the last day of his holiday. 2.bequeath vt.遗赠;把…遗赠给;把… .传给 (比give更正式) bequeath sb sth bequeath sth to sb Don’t bequeath the problem …

JDK17 || JDK 8 完美 卸载 教程 (Windows版)

文章目录一、卸载jdk程序1 . 找到控制面板2. 卸载程序3. 找到JDK 相关的程序4. 右键 选择卸载程序5. 下一步 选择 是6.下一步 选择 是二、安装 新版 JDK三、如果不想再使用jdk环境结语一、卸载jdk程序 1 . 找到控制面板 2. 卸载程序 3. 找到JDK 相关的程序 4. 右键 选择卸载程…

IDEA界面和控制台的滚动条颜色不明显?赶快换一个吧!

前言 不知道大家是否和我一样有这么一个烦恼: IDEA自带的滚动条颜色很暗,配上一些主题颜色搭配很难发现。 所以今天就想着怎么可以修改滚动条颜色,首先去网上搜了搜都是什么鼠标滚轮加shift滚动,一点也不实用 偶然看到了个不错的…