Python爬虫设置IP代理

news2025/5/25 19:56:36

设置代理(Proxy)

作用:
当网站检测到某个IP的访问频率过高时,可能会封禁该IP。通过使用代理服务器,可以定期更换IP地址,避免被识别和封锁。

优势:
让网站无法追踪真实请求来源,提升爬虫的隐蔽性和稳定性。

分类:

透明代理

  • 特点:目标网站能检测到你在使用代理,并知道你的真实IP地址。

  • 适用性:不符合隐藏真实IP的需求。

匿名代理

  • 特点:目标网站知道你使用了代理,但无法获取你的真实IP。

  • 适用性:提供基础匿名性,但仍有被识别的风险。

高匿代理(推荐)

  • 特点:目标网站既无法检测代理使用,也无法获取真实IP。

  • 适用性:最适合爬虫场景,隐蔽性最高。

IP可以自己在网上搜免费的或者购买IP代理池

# 导入必要的库
from urllib.request import Request, build_opener  # 用于创建请求和打开器
from fake_useragent import UserAgent  # 用于生成随机User-Agent
from urllib.request import ProxyHandler  # 用于设置代理

# 定义目标URL
url = 'http://httpbin.org/get'

# 设置请求头,使用随机生成的Chrome浏览器User-Agent
headers = {
    'User-Agent': UserAgent().chrome
}

# 创建请求对象,传入URL和请求头
request = Request(url, headers=headers)

# 设置代理(注释展示了不同格式的代理配置)
# 格式1: 带用户名密码的代理
# handler = ProxyHandler({"http": "username:password@ip:port"})
# 格式2: 实际用户名密码和代理IP端口的示例(已注释,避免暴露敏感信息)
# handler = ProxyHandler({"http": "dtxqwxkb:scocqa4e@180.103.123.171:16818"})
# 格式3: 仅IP和端口的代理(无认证)
# handler = ProxyHandler({"http": "ip:port"})
# 实际使用的代理配置(当前启用的是无认证代理)
handler = ProxyHandler({"http": "180.103.123.171:16818"})

# 创建带有代理配置的打开器
opener = build_opener(handler)

# 发送请求并获取响应
response = opener.open(request)

# 打印响应内容(解码为UTF-8字符串)
print(response.read().decode('utf-8'))  

实现自动更换代理IP:

方法1:从代理池随机选择(需提前准备IP列表)
import random
from urllib.request import Request, build_opener, ProxyHandler
from fake_useragent import UserAgent

# 代理池(示例IP,需替换为实际可用的代理)
proxy_pool = [
    "180.103.123.171:16818",
    "203.156.124.82:8080",
    "45.167.124.10:9999"
]

# 随机选择一个代理
proxy = random.choice(proxy_pool)
handler = ProxyHandler({"http": proxy})

# 创建请求
url = 'http://httpbin.org/get'
headers = {'User-Agent': UserAgent().chrome}
request = Request(url, headers=headers)

# 发送请求
opener = build_opener(handler)
response = opener.open(request)
print(f"当前代理IP: {proxy}")
print(response.read().decode('utf-8'))

 方法2:通过API动态获取新IP(需代理服务商支持)

import requests
from urllib.request import Request, build_opener, ProxyHandler
from fake_useragent import UserAgent

# 从代理服务商API获取新IP(示例API,需替换为实际接口)
def get_new_proxy():
    api_url = "https://your-proxy-service.com/api/get-ip"
    response = requests.get(api_url).json()
    return f"{response['ip']}:{response['port']}"

# 动态获取代理
proxy = get_new_proxy()
handler = ProxyHandler({"http": proxy})

# 创建请求
url = 'http://httpbin.org/get'
headers = {'User-Agent': UserAgent().chrome}
request = Request(url, headers=headers)

# 发送请求
opener = build_opener(handler)
response = opener.open(request)
print(f"当前代理IP: {proxy}")
print(response.read().decode('utf-8'))

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

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

相关文章

Adminer 连接mssql sqlserver

第一步 docker-compose.yml adminer部分: version: 3.8 services: adminer: image: adminer:latest container_name: adminer restart: unless-stopped volumes: - ./freetds/freetds.conf:/etc/freetds.conf:rw # 确保 :rw 可读写 co…

C++系统IO

C系统IO 头文件的使用 1.使用系统IO必须包含相应的头文件,通常使用#include预处理指令。 2.头文件中包含了若干变量的声明,用于实现系统IO。 3.头文件的引用方式有双引号和尖括号两种,区别在于查找路径的不同。 4.C标准库提供的头文件通常没…

DELL EMC PowerStore BBU更换手册

写在前面 上周给客户卖了一个BBU电池,客户要写一个更换方案。顺利完成了更换,下面就把这个更换方案给大家share出来,以后客户要写,您就Ctrlc 和Ctrlv就可以了。 下面的步骤是最理想的方式,中间没有任何的问题&#xff…

css五边形

五边形 .fu{width: 172rpx;height: 204rpx;overflow: hidden;border-radius: 10rpx;clip-path: polygon(0% 0%, 100% 0%, 100% 75%, 50% 100%, 0% 75%, 0% 25%); }六边形 clip-path: polygon(50% 0%, 100% 25%, 100% 75%, 50% 100%, 0% 75%, 0% 25%);

三种常见脉冲神经网络编码方式解读

速率编码(rate coding) 速率编码使用输入特征来确定尖峰频率,例如将静态输入数据(如 MNIST 图像)转换为时间上的脉冲(spike)序列。它是将神经元发放脉冲的频率与输入值(如像素强度)…

STM32F103 HAL多实例通用USART驱动 - 高效DMA+RingBuffer方案,量产级工程模板

导言 《STM32F103_LL库寄存器学习笔记12.2 - 串口DMA高效收发实战2:进一步提高串口接收的效率》前阵子完成的LL库与寄存器版本的代码,有一个明显的缺点是不支持多实例化。最近,计划基于HAL库系统地梳理一遍bootloader程序开发。在bootloader程…

HTML回顾

html全称:HyperText Markup Language(超文本标记语言) 注重标签语义,而不是默认效果 规则 块级元素包括: marquee、div等 行内元素包括: span、input等 规则1:块级元素中能写:行内元素、块级元素&…

机器视觉6-halcon高级教程

机器视觉6-halcon高级教程 双目立体视觉原理视差外极线几何双目标定 双目立体视觉之Halcon标定一.标定结果二.Halcon标定过程1.获取左右相机图像中标定板的区域;2.提取左右相机图像中标定板的MARK点坐标和摄像机外部参数;3.执行双目标定;4.获取非标准外极线几何到标…

YOLOv8 的双 Backbone 架构:解锁目标检测新性能

一、开篇:为何踏上双 Backbone 探索之路 在目标检测的领域中,YOLOv8 凭借其高效与精准脱颖而出,成为众多开发者和研究者的得力工具。然而,传统的单 Backbone 架构,尽管已经在诸多场景中表现出色,但仍存在一…

1.4 TypeScript 编译是如何工作的?

TypeScript 是 JavaScript 的超集,最显著的优势是引入了静态类型检查。它能帮助开发者在编写代码阶段捕获错误,从而提升代码的健壮性和可维护性。虽然 TypeScript 本身不能直接在浏览器或 Node.js 中运行,但它可以被编译成标准的 JavaScript&…

Web 服务、 Nfs 服务器以及 Dns 服务器综合实验

要求: 1.web 服务的资源文件通过 nfs 服务器共享 www.luntan.com 2.确保所有主机时间同步 3.定义本地 dns 服务器解析 web 主机域名 实验: 主机服务程序192.168.96.142dns、nfs192.168.96.132web 服务器说明: 设备 IP服务端 192…

汇编语言的子程序魔法:解锁四则运算的奥秘

在嵌入式系统的世界里,汇编语言就像是魔法师手中的魔杖,能够直接操控硬件,实现各种神奇的功能。今天,我将带你走进一场充满乐趣的实验:如何用汇编语言实现四则运算,并将它们封装成子程序。这不仅是一次技术…

快速解决Linux 中yum镜像拉取失败问题

在linux中使用yum命令拉取镜像的时候,如果出现如下类似报错: 我这里是安装Erlang环境也是同样报错: 其实就是网络环境的问题,更换为国内的镜像源就行了,可以选择cmd的ssh连接方式(命令:ssh root192.168.xxx…

HarmonyOS基础组件:Button三种类型的使用

简介 HarmonyOS在明年将正式不再兼容Android原生功能,这意味着对于客户端的小伙伴不得不开始学习HarmonyOS开发语言。本篇文章主要介绍鸿蒙中的Button使用。 HarmonyOS中的Button相较于Android原生来说,功能比较丰富,扩展性高,减…

产业互联网+三融战略:重构企业增长密码

产业互联网时代:用"三融"重构企业增长飞轮 在产业互联网浪潮下,企业面临资源分散、资金短缺、人才难聚的三重挑战。本文提出的"融人、融资、融资源"顶层设计,正为新时代企业构建增长新引擎。 一、三级合伙人体系&#x…

Centos系统资源镜像配置

主要体现 yum 命令执行报错,排除网络连接问题 解决步骤: 下载安装工具 # 安装 wget curl vim yum install -y wget curl vim 原有repo文件备份 # 进入配置文件所在文件夹 cd /etc/yum.repos.d# 创建 backup 文件夹 mkdir backup# 备份文件放置文件夹 m…

【Linux网络篇】:Socket网络套接字以及简单的UDP网络程序编写

✨感谢您阅读本篇文章,文章内容是个人学习笔记的整理,如果哪里有误的话还请您指正噢✨ ✨ 个人主页:余辉zmh–CSDN博客 ✨ 文章所属专栏:Linux篇–CSDN博客 文章目录 网络编程套接字一.预备知识1.理解源IP地址和目的IP地址2.认识端…

学习路之uniapp--unipush2.0推送功能--给自己发通知

学习路之uniapp--unipush2.0推送功能--给自己发通知 一、绑定云空间及创建云函数二、编写发送界面三、效果后期展望: 一、绑定云空间及创建云函数 package.json {"name": "server-push","dependencies": {},"main": "…

leetcode hot100刷题日记——12.反转链表

解答: /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullptr) {}* ListNode(int x, ListNode *next) : val(x), next(n…

《Python语言程序设计》第4章第8题3个个位数之间比大小。‘a小于b而b大于c’这是最有漏洞的一个对比,请问我如何判断a和c

升序来做这个题 比如123就变成321 需要比对3个数 这不是比对2个数。a和b比对 我们可以直接写 if a>b: print(ab) else print(ba) 但是现在是3个数abc 如果进行if比对呢 if a > b >c: print(a,b,c) elif a < b >c: print(bca) … 简洁的代码变成了复杂的代码段。…