如何在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代理:
- 购买付费IP代理:在网络上有许多提供付费IP代理服务的公司,我们可以通过购买这些服务来获取IP代理。
- 免费IP代理网站:在网络上也有许多提供免费IP代理的网站,我们可以通过这些网站来获取IP代理,例如:https://www.zdaye.com/。
- 自己搭建代理服务器:如果有一台自己的服务器或者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代理失效的方法:
- 使用多个代理IP进行轮流使用。
- 在使用代理IP之前,先检测代理IP的可用性。
- 在使用代理IP时,限制请求频率,避免过于频繁的请求。
- 在使用代理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代理? 2. 如何获取IP代理? 3. 如何使用IP代理? 4. 如何避免IP代理失效? 5. 代理IP的匿名性 二、代码示例 总结 前言 在进行爬虫时,我们很容易会遇到反爬虫机制。网站…...
干货丨Linux终端常见用法总结(收藏)
一、前言 熟悉Linux终端的基础用法和常见技巧可以极大提高运维及开发人员的工作效率,笔者结合自身学习实践,总结以下终端用法供同行交流学习。 二、常见用法 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任意文件读取漏洞复现
感谢互联网提供分享知识与智慧,在法治的社会里,请遵守有关法律法规 文章目录 1.1、漏洞描述1.2、漏洞等级1.3、影响版本1.4、漏洞复现代码审计漏洞点 1.5、深度利用EXP编写 1.6、漏洞挖掘1.7修复建议 1.1、漏洞描述 漏洞名称:MetInfo任意文件…...
3.22每日一题(二重积分求平面区域面积)
先复习求平面积分的公式 注:面对平面积分直接使用二重积分对1求积分即可;所以只需要背二重积分的两个公式: 1、直角坐标下对1积分 2、极坐标下对1积分 xy-1是等轴双曲线!! 1、先画图定区域 2、选择先对x积分还是先对…...
Hadoop环境搭建
1 Hadoop集群环境搭建概述 所谓集群,就是一组通过网络互联的计算机,集群中的每一台计算机称作一个节点,Hadoop集群搭建就是在这个物理集群之上安装部署Hadoop相关的软件,然后对外提供大数据存储和分析等相关服务。 一个前提&…...
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:字符串通配符 描述 问题描述:在计算机中,通配符一种特殊语法,广泛应用于文件搜索、数据库、正则表达式等领域。现要求各位实现字符串通配符的算法。 要求: 实现如下2个通配符: *:匹配0个…...
第十一章 日志管理
第十一章 日志管理 1日志进程rsyslog 任务一 rsyslog 系统日志管理 关心问题 哪些程序产生的什么日志放到什么地方 任务一详解 1处理日志的进程 第一类 rsyslog 系统专职日志程序 处理绝大部分日志记录 系统操作有关的信息 如登录信息 程序启动关闭信息 错误喜喜 …...
灯串跨境外贸出口欧美CE认证和UL588报告周期解析
灯串灯具出口欧盟要做CE认证,CE认证需要做CE的两项检测,工作电压直流75V以上,交流50V以上 测试EMCLVD两项。 灯串LVD(安规)标准为: 欧洲EN 60598-2-20:2015 1.标记 2.结构 3.爬电距离和电气间隙 4.接线端子 5.外部接线和内…...
大数据中的分布式文件系统MapReduce的选择题
一 . 选择题 一. 单选题(共9题,49.5分) (单选题)下列传统并行计算框架,说法错误的是哪一项? A. 刀片服务器、高速网、SAN,价格贵,扩展性差上 B. 共享式(共享内存/共享存储),容错性好 C. 编程难度高 D. 实时、细粒度计算、计算密集型 正确答…...
storm安装手册及笔记
图解Storm相关概念 图解storm的并发机制 安装Storm的步骤 1、安装一个zookeeper集群 2、上传storm的安装包,解压 3、修改配置文件storm.yaml #所使用的zookeeper集群主机 storm.zookeeper.servers: - "weekend05" - "weekend06"…...
vue 视频流播放
采用的技术是vueflv.js 前言 常见视频流格式 ● RTMP(推流端、拉流端) ● RTSP(推流端) ● HLS(拉流端) ● FLV(拉流端) 视频流是否依赖插件直播/点播协议web/移动端flv否直播点播…...
Azure 机器学习 - 使用Python SDK训练模型
目录 一、环境准备二、工作区限制三、什么是计算目标?四、本地计算机五、远程虚拟机六、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{ //可以在返回之前设立一些逻辑规则。//相当于要获得一个返回值,有点像方法//意味着这个属性将要获取的内容。return…...
3、Dockerfile 深入与其他细节
Dockerfile 在 Docker 中创建镜像最常用的方式,就是使用 Dockerfile。Dockerfile 是一个 Docker 镜像 的描述文件,我们可以理解成火箭发射的 A、B、C、D…的步骤。Dockerfile 其内部包含了一 条条的指令,每一条指令构建一层,因此每…...
大数据之陌陌聊天数据分析案例
目录 目标需求 数据内容 基于Hive数仓实现需求开发 1.建库建表、加载数据 2.ETL数据清洗 3需求指标统计 目标需求 基于Hadoop和hive实现聊天数据统计分析,构建聊天数据分析报表 1.统计今日总消息量 2.统计今日每小时消息量,发送和接收用户数 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字幕,让视频更生动
随着社交媒体的普及,视频制作变得越来越重要。无论是记录生活,还是分享知识,视频都是一个非常有力的工具。但是,如何让您的视频更生动、更吸引人呢?通过学习视频剪辑,您可以使您的视频更具有吸引力。而在这…...
Windows桌面便签工具推荐使用哪一款?
电脑桌面上张贴便利贴可以将近期需要完成的工作计划逐一添加到便利贴中,电脑桌面悬挂便利贴工具可以督促日常各项事务的完成。当前可悬挂在电脑桌面上的便利贴工具是比较多的,其中桌面小工具便签软件敬业签可满足各行业的办公需求。 建议大家在Windows桌…...
Docker 离线安装指南
参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性,不同版本的Docker对内核版本有不同要求。例如,Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本,Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...
<6>-MySQL表的增删查改
目录 一,create(创建表) 二,retrieve(查询表) 1,select列 2,where条件 三,update(更新表) 四,delete(删除表…...
阿里云ACP云计算备考笔记 (5)——弹性伸缩
目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...
【Linux】C语言执行shell指令
在C语言中执行Shell指令 在C语言中,有几种方法可以执行Shell指令: 1. 使用system()函数 这是最简单的方法,包含在stdlib.h头文件中: #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...
Opencv中的addweighted函数
一.addweighted函数作用 addweighted()是OpenCV库中用于图像处理的函数,主要功能是将两个输入图像(尺寸和类型相同)按照指定的权重进行加权叠加(图像融合),并添加一个标量值&#x…...
网站指纹识别
网站指纹识别 网站的最基本组成:服务器(操作系统)、中间件(web容器)、脚本语言、数据厍 为什么要了解这些?举个例子:发现了一个文件读取漏洞,我们需要读/etc/passwd,如…...
AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别
【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而,传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案,能够实现大范围覆盖并远程采集数据。尽管具备这些优势…...
Python 训练营打卡 Day 47
注意力热力图可视化 在day 46代码的基础上,对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...
python打卡第47天
昨天代码中注意力热图的部分顺移至今天 知识点回顾: 热力图 作业:对比不同卷积层热图可视化的结果 def visualize_attention_map(model, test_loader, device, class_names, num_samples3):"""可视化模型的注意力热力图,展示模…...
如何做好一份技术文档?从规划到实践的完整指南
如何做好一份技术文档?从规划到实践的完整指南 🌟 嗨,我是IRpickstars! 🌌 总有一行代码,能点亮万千星辰。 🔍 在技术的宇宙中,我愿做永不停歇的探索者。 ✨ 用代码丈量世界&…...
