【Python】Python爬虫使用代理IP的实现

news2024/10/7 14:22:09

前言

在爬虫的过程中,我们经常会遇到需要使用代理IP的情况。比如,针对目标网站的反爬机制,需要通过使用代理IP来规避风险。因此,本文主要介绍如何在Python爬虫中使用代理IP。

一、代理IP的作用

代理IP,顾名思义,就是使用代理服务器提供的IP地址来进行网络请求。代理服务器可以发挥以下作用:

  1. 隐藏发起请求的真实IP地址,起到一定的匿名效果。
  2. 提高网络请求的访问速度,通过代理服务器可以避免一些网络瓶颈和限制问题。
  3. 规避反爬机制,伪装成不同的IP,从而避免被封禁或限制访问。

二、代理IP的分类

  1. 高匿代理:代理服务器完全隐藏了客户机的IP,对于被代理的服务器来说,它看到的只是代理服务器的IP地址。
  2. 透明代理:代理服务器并没有隐藏客户机的IP,被代理的服务器可以轻易地检测出客户机的IP地址。
  3. 匿名代理:代理服务器隐藏了客户机的IP地址,但是在HTTP头中会添加“via”字段,可以被检测出来。

三、代理IP的获取

获取ip

在使用代理IP之前,我们需要先获得代理IP。有很多免费和收费的代理IP提供商,我们可以通过这些提供商免费或付费获取代理IP。这里我们介绍两个比较好用的免费代理IP提供网站:

  • https://www.zdaye.com/
  • https://www.kxdaili.com/

在这两个网站中,我们可以根据自己的需求搜索到符合条件的代理IP,然后将这些IP保存在本地,作为后续爬取时使用的代理IP池。

代码实现

在Python中,使用代理IP的示例代码如下:

import requests

# 使用代理IP
proxies = {
    'http': 'http://username:password@ip:port',
    'https': 'https://username:password@ip:port'
}

# 爬取目标网站
url = 'http://www.baidu.com'
res = requests.get(url, proxies=proxies)

其中,proxies字典中存放了我们要使用的代理IP。由于代理服务器需要进行身份验证,所以在IP地址前面需要加上用户名和密码,这样才能成功通过代理IP访问目标网站。如果代理IP是免费的,则不需要身份验证,直接写IP地址即可。

在使用代理IP时,需要特别注意以下几点:

  1. 代理IP的格式必须正确,否则会导致请求失败。
  2. 代理IP的质量影响着爬虫的效率和稳定性,建议选择高质量的代理IP。
  3. 在使用代理IP时,不要过于频繁地切换IP地址,否则可能会被目标网站封禁。
  4. 使用代理IP时,需要处理异常情况,比如代理服务器无法连接、请求超时等问题。

完整的Python爬虫使用代理IP的示例代码如下:

import requests
import random

# 读取代理IP池
def read_ips(file_path):
    ips = []
    with open(file_path, 'r') as f:
        for line in f:
            ip = line.strip()
            ips.append(ip)
    return ips

# 随机选择一个代理IP
def get_random_ip(ips):
    ip = random.choice(ips)
    return ip

# 使用代理IP访问网页
def get_page(url, proxies):
    try:
        res = requests.get(url, headers=headers, proxies=proxies, timeout=5)
        if res.status_code == 200:
            return res.text
    except requests.exceptions.RequestException as e:
        print(e)
        return None

if __name__ == '__main__':
    # 定义常量
    file_path = 'ips.txt'
    url = 'http://www.baidu.com'
    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池
    ips = read_ips(file_path)

    # 随机选择一个代理IP
    ip = get_random_ip(ips)
    proxies = {
        'http': 'http://' + ip,
        'https': 'https://' + ip
    }

    # 使用代理IP访问网页
    html = get_page(url, proxies)
    print(html)

首先,我们定义了read_ips函数用来读取代理IP池,将读取到的IP地址保存在一个列表中。然后,我们定义了get_random_ip函数,用来随机选择一个代理IP。最后,我们定义了get_page函数用来使用代理IP访问目标网站。

在主函数中,我们先读取代理IP池,然后随机选择一个代理IP,将其作为参数传递给get_page函数。在get_page函数中,我们调用requests库的get方法,使用指定的代理IP访问目标网站,并返回响应的内容。如果访问成功,则将响应内容打印输出;否则输出异常信息。

总结

Python爬虫使用代理IP的主要步骤包括获取代理IP、使用代理IP访问目标网站以及处理异常情况。使用代理IP是规避反爬机制的一种有效方法,但需要注意代理IP的质量和使用频率。我们可以通过免费或付费代理IP提供商获取代理IP,然后根据自己的需求选择合适的IP地址进行使用。

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

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

相关文章

2011年408计网

第33题 TCP/IP 参考模型的网络层提供的是()A. 无连接不可靠的数据报服务B. 无连接可靠的数据报服务C. 有连接不可靠的虚电路服务D. 有连接可靠的虚电路服务 本题考查TCP/IP 参考模型的网络层 若网络层提供的是虚电路服务,则必须建立网络层的…

531X304IBDASG1 F31X303MCPA002/00 发电用分布式控制系统

531X304IBDASG1 F31X303MCPA002/00 发电用分布式控制系统 2021年4月20日,马萨诸塞州戴德姆。-新的ARC咨询小组关于全球的研究发电用分布式控制系统(DCS)市场显示,全球燃煤发电能力的减少继续阻碍增长。老化的燃煤电厂越来越多地被淘汰,而不是…

23个优秀开源免费BI仪表盘

BI也称为商业智能,是收集、分析和展示数据以支持决策者做出明智的业务决策的过程。BI帮助组织将其原始的生产数据转化为有意义的见解或者知识,以推动其业务战略。BI能够为组织改善决策、提高效率和提升资源利用率。 BI仪表盘是BI系统的重要组成部分&…

【调度算法】并行机调度问题遗传算法

问题描述 m台相同的机器,n个工件,每个工件有1道工序,可按照任意的工序为每个工件分配一台机器进行加工 工件ABCDEFGHI工件编号012345678加工时间4765835510到达时间324532186交货期101530241413201810 设备数目:3 目标函数 最…

基于java+springboot+vue的幼儿园信息网站

项目介绍 随着科学技术的飞速发展,各行各业都在努力与现代先进技术接轨,通过科技手段提高自身的优势;对于幼儿园管理系统当然也不能排除在外,随着网络技术的不断成熟,带动了幼儿园管理系统,它彻底改变了过…

基于卷积优化算法的无人机航迹规划-附代码

基于卷积优化算法的无人机航迹规划 文章目录 基于卷积优化算法的无人机航迹规划1.卷积优化搜索算法2.无人机飞行环境建模3.无人机航迹规划建模4.实验结果4.1地图创建4.2 航迹规划 5.参考文献6.Matlab代码 摘要:本文主要介绍利用卷积优化算法来优化无人机航迹规划。 …

EOCR-3BZ2/FBZ2的三种接点输出方式

施耐德EOCR-3BZ2/FBZ2电动机保护器具有体积小、精度高、抗干扰能力强、内置零序互感器等特点,同时具有低频运行和温、湿度检测功能。为适应不同的控制要求,EOCR-3BZ2/FBZ2电动机保护器具有2种输出方式,具体如下 输出接点: 接线图…

MicroPython ESP32 RTC功能使用介绍

MicroPython ESP32 RTC功能使用介绍 📌Micropython esp32官方文档介绍:https://docs.micropython.org/en/latest/esp32/quickref.html#real-time-clock-rtc🔖本示例基于Thonny平台开发。🌿使用ESP32S3开发板测试。✨所使用的固件版…

软件测试入门之接口测试

首先,什么是接口呢? 接口一般来说有两种,一种是程序内部的接口,一种是系统对外的接口。 系统对外的接口:比如你要从别的网站或服务器上获取资源或信息,别人肯定不会把数据库共享给你,他只能给你…

Google Chrome 浏览器 119.0.6045.106 版本提示 STATUS_INVALID_IMAGE_HASH 崩溃

问题 今天更新 Google Chrome 浏览器到 119.0.6045.106 版本,然后访问页面不是空白,就是页面崩溃了 解决方案 我在网上找了几种,下面这个方式符合,能解决我的问题,就是在快捷方式的属性那里,找到目标给它…

AndroidStudio 运行报错:Invalid keystore format

AndroidStudio 运行报错:Invalid keystore format 把这玩意儿删了重新打开Android Studio运行一下就好了!!!

OJ中常用平衡树,Treap树堆详解

文章目录 Treap定义Treap的可行性Treap的构建节点定义旋转左单旋右单旋旋转的代码实现 插入插入的代码实现 删除遍历查找Treap对权值的扩展Treap对size的扩展扩展size域后的节点定义和旋转,插入,删除操作查询第k小的元素求元素的排名 查询后继、前驱Trea…

vs code 和 hbuilder 历史记录查询

一.Hbuilder 找到需要的文件右键 二. vs code

基于人工兔算法的无人机航迹规划-附代码

基于人工兔算法的无人机航迹规划 文章目录 基于人工兔算法的无人机航迹规划1.人工兔搜索算法2.无人机飞行环境建模3.无人机航迹规划建模4.实验结果4.1地图创建4.2 航迹规划 5.参考文献6.Matlab代码 摘要:本文主要介绍利用人工兔算法来优化无人机航迹规划。 1.人工兔…

最长非递减子序列,Python实现

from time import time from bisect import bisect from random import choices, seed from itertools import combinationsdef func1(seq):# 暴力穷举,从最长的子序列开始查找,大约耗时5小时for n in range(len(seq)-1, 0, -1): # 依次查找长度为len(se…

php实现钉钉机器人推送消息和图片内容(完整版)

先来看下实现效果: 代码如下: function send_dingtalk_markdown($webhook , $title , $message "", $atMobiles [], $atUserIds []) {$data ["msgtype" > "markdown","markdown" > ["title" > $title,&quo…

操作系统引论(二)

操作系统发展动力及技术基础 推动操作系统的发展和资源利用率的提高是相关联的。 让输入输出相对独立,通道技术,通道相当于简单的处理器,通过输入输出指令,控制外设完成输入输出。 输入和输出过程不是由主机控制的,是…

12 克莱姆法则的几何解释

克莱姆法则的几何解释 线性方程组求解正交变换克莱姆法则 这是关于3Blue1Brown "线性代数的本质"的学习笔记。 线性方程组求解 克莱姆法则并非解线性方程组的最好方法(高斯消元法更好),了解它是为了加深对线性方程组的理解。 图…

华为李鹏:到 2025 年智能算力需求将达到目前水平的 100 倍

在第十四届全球移动宽带论坛上,华为高级副总裁、运营商 BG 总裁李鹏表示,大模型为代表的 AI 应用发展带来对智能算力的爆发式需求。 李鹏在题为《加速 5G 商业正循环,拥抱更繁荣的 5.5G》的讲话中表示,「5G 已经走在商业成功的正确…

Linux系统下数据同步服务RSYNC

一、RSYNC概述 1、什么是rsync rsync的好姐妹 sync 同步:刷新文件系统缓存,强制将修改过的数据块写入磁盘,并且更新超级块。 async 异步:将数据先放到缓冲区,再周期性(一般是30s)的去同步到磁…