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

如何在Python爬虫中使用IP代理以避免反爬虫机制

目录

前言

一、IP代理的使用

1. 什么是IP代理?

2. 如何获取IP代理?

3. 如何使用IP代理?

4. 如何避免IP代理失效?

5. 代理IP的匿名性

二、代码示例

总结


前言

在进行爬虫时,我们很容易会遇到反爬虫机制。网站的反爬虫机制可能会限制请求频率、锁定账号、封禁IP等。为了避免反爬虫机制的限制,我们可以使用IP代理来隐藏本机IP地址。本文将介绍如何在Python爬虫中使用IP代理以避免反爬虫机制。

一、IP代理的使用

1. 什么是IP代理?

IP代理是一种将本机IP地址隐藏起来,使用其他IP地址进行网络请求的技术。通过使用IP代理,我们可以避免被网站封禁IP或限制请求频率。

2. 如何获取IP代理?

我们可以通过以下几种方式获取IP代理:

  1. 购买付费IP代理:在网络上有许多提供付费IP代理服务的公司,我们可以通过购买这些服务来获取IP代理。
  2. 免费IP代理网站:在网络上也有许多提供免费IP代理的网站,我们可以通过这些网站来获取IP代理,例如:https://www.zdaye.com/。
  3. 自己搭建代理服务器:如果有一台自己的服务器或者VPS,我们可以通过搭建代理服务器来获取IP代理。

在获取IP代理时,需要注意代理IP的可用性。有些IP代理质量较差或者已经被封禁,需要通过检测代理IP可用性来筛选可用的代理IP。

3. 如何使用IP代理?

在Python爬虫中,我们一般使用requests库来进行网络请求。requests库提供了一个proxies参数,可以用来指定使用代理IP进行请求。proxies参数是一个字典,键为代理类型(http或https等),值为代理IP和端口号的字符串,格式为:{‘http’: ‘http://xxx.xxx.xxx.xxx:xxxx’, ‘https’: ‘https://xxx.xxx.xxx.xxx:xxxx’}。下面是使用代理IP进行网络请求的示例代码:

import requestsurl = 'http://www.baidu.com'
proxies = {'http': 'http://xxx.xxx.xxx.xxx:xxxx','https': 'https://xxx.xxx.xxx.xxx:xxxx'
}
response = requests.get(url, proxies=proxies)

在这个示例代码中,我们使用requests库向百度发送了一个请求,并通过proxies参数指定使用代理IP进行请求。

4. 如何避免IP代理失效?

IP代理有时候会失效或者被封禁,这时候我们需要更换代理IP。下面是一些常用的避免IP代理失效的方法:

  1. 使用多个代理IP进行轮流使用。
  2. 在使用代理IP之前,先检测代理IP的可用性。
  3. 在使用代理IP时,限制请求频率,避免过于频繁的请求。
  4. 在使用代理IP时,尽量模拟人的行为,例如:使用代理IP进行登录时,需要先发送登录页面的请求,获取到登录所需要的参数,再发送登录请求。
5. 代理IP的匿名性

IP代理有不同的匿名性等级,分为透明、匿名和高匿,其中高匿的匿名性最高。代理IP提供商一般会说明代理IP的匿名性等级。在使用代理IP时,需要根据需求选择不同匿名性等级的代理IP。

二、代码示例

下面给出一个完整的Python爬虫示例代码,包括如何获取IP代理、如何使用IP代理以及如何避免IP代理失效。这个示例代码通过爬取豆瓣电影Top250页面来演示如何使用IP代理。

import requests
from bs4 import BeautifulSoup
import random
import time
import threading# 获取代理IP
def get_proxies():url = 'https://www.zdaye.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'}response = requests.get(url, headers=headers)soup = BeautifulSoup(response.text, 'html.parser')proxy_list = []for tr in soup.find_all('tr')[1:]:tds = tr.find_all('td')ip = tds[1].text.strip()port = tds[2].text.strip()protocol = tds[5].text.strip().lower()proxy = {'protocol': protocol, 'ip': ip, 'port': port}proxy_list.append(proxy)return proxy_list# 检测代理IP可用性
def check_proxy(proxy, protocol='http'):proxies = {protocol: protocol + '://' + proxy['ip'] + ':' + proxy['port']}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'}try:response = requests.get('http://www.baidu.com', headers=headers, proxies=proxies, timeout=10)if response.status_code == 200:print(proxy, 'is OK')return Trueelse:print(proxy, 'is not OK')return Falseexcept Exception as e:print(proxy, 'is not OK', e)return False# 获取页面HTML
def get_html(url, proxies=None):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'}try:response = requests.get(url, headers=headers, proxies=proxies)response.raise_for_status()response.encoding = response.apparent_encodingreturn response.textexcept Exception as e:print(e)return None# 获取电影信息
def get_movie_info(html):soup = BeautifulSoup(html, 'html.parser')movie_list = soup.find_all('div', class_='info')for movie in movie_list:title = movie.find('span', class_='title').text.strip()rating = movie.find('span', class_='rating_num').text.strip()print(title, rating)return len(movie_list)# 主函数
def main():# 获取代理IP列表proxy_list = get_proxies()# 筛选可用代理IPusable_proxies = []for proxy in proxy_list:if check_proxy(proxy):usable_proxies.append(proxy)# 如果可用代理IP为空,则退出程序if len(usable_proxies) == 0:print('No usable proxies')return# 循环使用代理IP爬取页面url = 'https://movie.douban.com/top250'count = 0while count < 5:# 随机选择一个可用的代理IPproxy = random.choice(usable_proxies)# 获取页面HTMLhtml = get_html(url, proxies={proxy['protocol']: proxy['protocol'] + '://' + proxy['ip'] + ':' + proxy['port']})# 如果获取页面HTML失败,则更换代理IPwhile not html:print(f'{proxy} failed, try another proxy')usable_proxies.remove(proxy)if len(usable_proxies) == 0:print('No usable proxies')returnproxy = random.choice(usable_proxies)html = get_html(url, proxies={proxy['protocol']: proxy['protocol'] + '://' + proxy['ip'] + ':' + proxy['port']})# 解析页面HTMLcount += get_movie_info(html)# 每隔5秒获取一次页面time.sleep(5)print('Done!')if __name__ == '__main__':main()

在这个示例代码中,首先使用get_proxies函数获取代理IP列表,然后使用check_proxy函数筛选出可用的代理IP,并保存到usable_proxies列表中。接着在循环中随机选择一个可用的代理IP,使用get_html函数获取页面HTML。如果获取页面HTML失败,则更换代理IP,直到获取成功。使用get_movie_info函数解析页面HTML,获取电影信息。每隔5秒获取一次页面,总计获取5次页面。

总结

在Python爬虫中使用IP代理可以避免反爬虫机制,通过获取代理IP并使用代理IP进行网络请求,从而隐藏本机IP地址,避免被网站封禁IP或限制请求频率。可以使用付费IP代理、免费IP代理网站或自己搭建代理服务器获取IP代理。在使用代理IP时,需要注意代理IP的可用性、匿名性等级以及避免IP代理失效的方法。使用IP代理可以有效提高爬虫的稳定性和可用性。

相关文章:

如何在Python爬虫中使用IP代理以避免反爬虫机制

目录 前言 一、IP代理的使用 1. 什么是IP代理&#xff1f; 2. 如何获取IP代理&#xff1f; 3. 如何使用IP代理&#xff1f; 4. 如何避免IP代理失效&#xff1f; 5. 代理IP的匿名性 二、代码示例 总结 前言 在进行爬虫时&#xff0c;我们很容易会遇到反爬虫机制。网站…...

干货丨Linux终端常见用法总结(收藏)

一、前言 熟悉Linux终端的基础用法和常见技巧可以极大提高运维及开发人员的工作效率&#xff0c;笔者结合自身学习实践&#xff0c;总结以下终端用法供同行交流学习。 二、常见用法 1.快捷键 1.1.Alt. 在光标位置插入上一次执行命令的最后一个参数。 1.2.CtrlR 模糊搜索历…...

【RealTek sdk-3.4.14b】RTL8197FH-VG+RTL8812FR实现实现Host 网络和Guest 网络隔离以及各个连接终端间隔离功能

SDK 说明 ** Gateway/AP firmware v3.4.14b – Aug 26, 2019**  Wireless LAN driver changes as:  Refine WiFi Stability and Performance  Add 8812F MU-MIMO  Add 97G/8812F multiple mac-clone  Add 97G 2T3R antenna diversity  Fix 97G/8812F/8814B MP iss…...

【漏洞复现】Metinfo6.0.0任意文件读取漏洞复现

感谢互联网提供分享知识与智慧&#xff0c;在法治的社会里&#xff0c;请遵守有关法律法规 文章目录 1.1、漏洞描述1.2、漏洞等级1.3、影响版本1.4、漏洞复现代码审计漏洞点 1.5、深度利用EXP编写 1.6、漏洞挖掘1.7修复建议 1.1、漏洞描述 漏洞名称&#xff1a;MetInfo任意文件…...

3.22每日一题(二重积分求平面区域面积)

先复习求平面积分的公式 注&#xff1a;面对平面积分直接使用二重积分对1求积分即可&#xff1b;所以只需要背二重积分的两个公式&#xff1a; 1、直角坐标下对1积分 2、极坐标下对1积分 xy-1是等轴双曲线&#xff01;&#xff01; 1、先画图定区域 2、选择先对x积分还是先对…...

Hadoop环境搭建

1 Hadoop集群环境搭建概述 所谓集群&#xff0c;就是一组通过网络互联的计算机&#xff0c;集群中的每一台计算机称作一个节点&#xff0c;Hadoop集群搭建就是在这个物理集群之上安装部署Hadoop相关的软件&#xff0c;然后对外提供大数据存储和分析等相关服务。 一个前提&…...

SpringBoot_mybatis-plus使用json字段

mybatis-plus使用json字段 1.前言2.方案分析2.1 为什么是json2.2 数据库的选择 3. 实战3.1 使用text字段(h2数据库)3.1.1 建表语句3.1.2 数据操作与查询 3.2 使用json字段(mysql数据库)3.2.1 建表语句3.2.2 数据操作与查询 4. 附录4.1 MySQL JSON索引用法4.2 mybatis-plus json…...

牛客出bug(华为机试HJ71)

Hj71&#xff1a;字符串通配符 描述 问题描述&#xff1a;在计算机中&#xff0c;通配符一种特殊语法&#xff0c;广泛应用于文件搜索、数据库、正则表达式等领域。现要求各位实现字符串通配符的算法。 要求&#xff1a; 实现如下2个通配符&#xff1a; *&#xff1a;匹配0个…...

第十一章 日志管理

第十一章 日志管理 1日志进程rsyslog 任务一 rsyslog 系统日志管理 ​ 关心问题 哪些程序产生的什么日志放到什么地方 任务一详解 1处理日志的进程 第一类 rsyslog 系统专职日志程序 处理绝大部分日志记录 系统操作有关的信息 如登录信息 程序启动关闭信息 错误喜喜 …...

灯串跨境外贸出口欧美CE认证和UL588报告周期解析

灯串灯具出口欧盟要做CE认证&#xff0c;CE认证需要做CE的两项检测,工作电压直流75V以上&#xff0c;交流50V以上 测试EMCLVD两项。 灯串LVD(安规&#xff09;标准为&#xff1a; 欧洲EN 60598-2-20:2015 1.标记 2.结构 3.爬电距离和电气间隙 4.接线端子 5.外部接线和内…...

大数据中的分布式文件系统MapReduce的选择题

一 . 选择题 一. 单选题&#xff08;共9题&#xff0c;49.5分&#xff09; (单选题)下列传统并行计算框架,说法错误的是哪一项? A. 刀片服务器、高速网、SAN,价格贵,扩展性差上 B. 共享式(共享内存/共享存储),容错性好 C. 编程难度高 D. 实时、细粒度计算、计算密集型 正确答…...

storm安装手册及笔记

图解Storm相关概念 图解storm的并发机制 安装Storm的步骤 1、安装一个zookeeper集群 2、上传storm的安装包&#xff0c;解压 3、修改配置文件storm.yaml #所使用的zookeeper集群主机 storm.zookeeper.servers: - "weekend05" - "weekend06"…...

vue 视频流播放

采用的技术是vueflv.js 前言 常见视频流格式 ● RTMP&#xff08;推流端、拉流端&#xff09; ● RTSP&#xff08;推流端&#xff09; ● HLS&#xff08;拉流端&#xff09; ● FLV&#xff08;拉流端&#xff09; 视频流是否依赖插件直播/点播协议web/移动端flv否直播点播…...

Azure 机器学习 - 使用Python SDK训练模型

目录 一、环境准备二、工作区限制三、什么是计算目标&#xff1f;四、本地计算机五、远程虚拟机六、Apache Spark 池七、Azure HDInsight八、Azure Batch九、Azure Databricks十、Azure Data Lake Analytics十一、Azure 容器实例十二、Kubernetes 了解如何用 SDK v1 将 Azure 计…...

C#成员属性代码示例

namespace Lesson_1类和对象 {class Person{private string name;private int age;private int money;private bool sex;public string Name { get{ //可以在返回之前设立一些逻辑规则。//相当于要获得一个返回值&#xff0c;有点像方法//意味着这个属性将要获取的内容。return…...

3、Dockerfile 深入与其他细节

Dockerfile 在 Docker 中创建镜像最常用的方式&#xff0c;就是使用 Dockerfile。Dockerfile 是一个 Docker 镜像 的描述文件&#xff0c;我们可以理解成火箭发射的 A、B、C、D…的步骤。Dockerfile 其内部包含了一 条条的指令&#xff0c;每一条指令构建一层&#xff0c;因此每…...

大数据之陌陌聊天数据分析案例

目录 目标需求 数据内容 基于Hive数仓实现需求开发 1.建库建表、加载数据 2.ETL数据清洗 3需求指标统计 目标需求 基于Hadoop和hive实现聊天数据统计分析&#xff0c;构建聊天数据分析报表 1.统计今日总消息量 2.统计今日每小时消息量&#xff0c;发送和接收用户数 3.…...

03 贝尔曼公式

贝尔曼公式 前言1、Motivating examples2、state value3、Bellman equation:Derivation4、Bellman equation:Matrix-vector form4、Bellman equation:Solve the state value5、Action value 前言 本文来自西湖大学赵世钰老师的B站视频。本节课主要介绍贝尔曼公式。 本节课概要…...

学习视频剪辑:批量添加srt字幕,让视频更生动

随着社交媒体的普及&#xff0c;视频制作变得越来越重要。无论是记录生活&#xff0c;还是分享知识&#xff0c;视频都是一个非常有力的工具。但是&#xff0c;如何让您的视频更生动、更吸引人呢&#xff1f;通过学习视频剪辑&#xff0c;您可以使您的视频更具有吸引力。而在这…...

Windows桌面便签工具推荐使用哪一款?

电脑桌面上张贴便利贴可以将近期需要完成的工作计划逐一添加到便利贴中&#xff0c;电脑桌面悬挂便利贴工具可以督促日常各项事务的完成。当前可悬挂在电脑桌面上的便利贴工具是比较多的&#xff0c;其中桌面小工具便签软件敬业签可满足各行业的办公需求。 建议大家在Windows桌…...

浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)

✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义&#xff08;Task Definition&…...

JavaSec-RCE

简介 RCE(Remote Code Execution)&#xff0c;可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景&#xff1a;Groovy代码注入 Groovy是一种基于JVM的动态语言&#xff0c;语法简洁&#xff0c;支持闭包、动态类型和Java互操作性&#xff0c…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销&#xff0c;平衡网络负载&#xff0c;延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...

Admin.Net中的消息通信SignalR解释

定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...

【第二十一章 SDIO接口(SDIO)】

第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...

JDK 17 新特性

#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持&#xff0c;不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的&#xff…...

安卓基础(aar)

重新设置java21的环境&#xff0c;临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的&#xff1a; MyApp/ ├── app/ …...

AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别

【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而&#xff0c;传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案&#xff0c;能够实现大范围覆盖并远程采集数据。尽管具备这些优势&#xf…...

快刀集(1): 一刀斩断视频片头广告

一刀流&#xff1a;用一个简单脚本&#xff0c;秒杀视频片头广告&#xff0c;还你清爽观影体验。 1. 引子 作为一个爱生活、爱学习、爱收藏高清资源的老码农&#xff0c;平时写代码之余看看电影、补补片&#xff0c;是再正常不过的事。 电影嘛&#xff0c;要沉浸&#xff0c;…...

Python 实现 Web 静态服务器(HTTP 协议)

目录 一、在本地启动 HTTP 服务器1. Windows 下安装 node.js1&#xff09;下载安装包2&#xff09;配置环境变量3&#xff09;安装镜像4&#xff09;node.js 的常用命令 2. 安装 http-server 服务3. 使用 http-server 开启服务1&#xff09;使用 http-server2&#xff09;详解 …...