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

Python爬虫-IP隐藏技术与代理爬取

前言

在进行爬虫程序开发和运行时,常常会遇到目标网站的反爬虫机制,最常见的就是IP封禁,这时需要使用IP隐藏技术和代理爬取。

 一、IP隐藏技术

IP隐藏技术,即伪装IP地址,使得爬虫请求的IP地址不被目标网站识别为爬虫。通过IP隐藏技术,可以有效地绕过目标网站对于特定IP地址的限制。

1. 随机User-Agent

User-Agent是指客户端程序请求时发送给服务器的字符串信息,通常包含当前客户端的软件版本、操作系统、语言环境和服务商等信息。在进行爬虫开发时,如果使用的User-Agent与浏览器不同,就容易被服务器端识别为爬虫,并对其进行限制。

因此,通过随机生成User-Agent字符串,可以有效地伪装客户端,让服务器认为是真正的用户在访问。下面是一个随机生成User-Agent的示例代码:

import randomdef get_user_agent():user_agents = ["Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36","Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.81 Safari/537.36","Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36","Mozilla/5.0 (Windows NT 6.1; WOW64; rv:54.0) Gecko/20100101 Firefox/54.0","Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:54.0) Gecko/20100101 Firefox/54.0","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36","Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36 Edge/15.15063","Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:54.0) Gecko/20100101 Firefox/54.0","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36 OPR/39.0.2256.48"]return random.choice(user_agents)

2. 设置Header头信息

在进行爬虫请求时,需要设置Request请求的Header头信息,尤其需要设置Referer和Cookie等信息。在设置Header头信息时,也需要注意伪装成真实的用户请求。

import requestsurl = "http://www.example.com"headers = {"User-Agent": get_user_agent(),"Referer": "http://www.example.com/","Cookie": "xxx"
}response = requests.get(url, headers=headers)

3. 使用动态IP代理

动态IP代理可以帮助我们隐藏真实的IP地址,通过代理服务器来请求目标网站,使得服务器无法识别爬虫程序的真实IP地址。

使用代理需要准备代理池,即多个可用的代理IP地址。可以通过代理IP提供商购买或免费获取。

import requestsdef get_proxy():return {"http": "http://username:password@proxy_address:port","https": "https://username:password@proxy_address:port"}url = "http://www.example.com"response = requests.get(url, proxies=get_proxy())

二、代理爬取

在进行代理爬取时,需要注意以下几个问题:

  1. 代理IP地址需要处于可用状态,否则会影响爬虫程序的运行效率。
  2. 代理IP地址的数量需要足够,否则会因为频繁的切换导致被服务器封禁。
  3. 代理IP地址的质量需要优秀,因为低质量的代理IP地址容易出现连接超时或网络错误等情况。

1. 使用代理池

代理池是指多个可用的代理IP地址的集合,通过代理池,可以自动维护可用的代理IP地址,从而避免了手动添加和删除代理IP地址的操作。代理池的实现可以参考下面的示例代码:

import random
import requests
import timeclass ProxyPool:def __init__(self):self.pool = []self.index = 0def get_proxy(self):if len(self.pool) == 0:return Noneproxy = self.pool[self.index]self.index += 1if self.index == len(self.pool):self.index = 0return proxydef add_proxy(self, proxy):if proxy not in self.pool:self.pool.append(proxy)def remove_proxy(self, proxy):if proxy in self.pool:self.pool.remove(proxy)def check_proxy(self, proxy):try:response = requests.get("http://www.example.com", proxies=proxy, timeout=10)if response.status_code == 200:return Truereturn Falseexcept:return Falsedef update_pool(self):new_pool = []for proxy in self.pool:if self.check_proxy(proxy):new_pool.append(proxy)self.pool = new_poolpool = ProxyPool()# 添加代理IP地址
pool.add_proxy({"http": "http://username:password@proxy_address:port", "https": "http://username:password@proxy_address:port"})# 更新代理池
while True:pool.update_pool()time.sleep(60)

 2. 随机切换代理

在进行代理爬取时,需要随机切换代理IP地址,避免因频繁连接同一IP地址而被服务器封禁。可以通过下面的示例代码实现随机切换代理:

import requestsdef get_random_proxy():return {"http": "http://username:password@proxy_address:port", "https": "http://username:password@proxy_address:port"}url = "http://www.example.com"for i in range(10):proxy = get_random_proxy()response = requests.get(url, proxies=proxy)

3. 使用优质代理

在进行代理爬取时,如果使用低质量的代理IP地址,容易出现连接超时或网络错误等情况,从而影响爬虫程序的运行效率。因此,选择优质的代理IP地址非常重要。

可以通过使用代理IP提供商提供的服务,选择优质的代理IP地址。同时,也可以通过定期测试代理IP地址的可用性,及时剔除失效的代理IP地址。下面是一个测试代理IP地址可用性的示例代码:

import requestsdef check_proxy(proxy):try:response = requests.get("http://www.example.com", proxies=proxy, timeout=10)if response.status_code == 200:return Truereturn Falseexcept:return Falseproxy = {"http": "http://username:password@proxy_address:port", "https": "http://username:password@proxy_address:port"}if check_proxy(proxy):print("代理IP地址可用")
else:print("代理IP地址不可用")

三、总结

在进行Python爬虫开发时,常常会遇到目标网站的反爬虫机制,最常见的就是IP封禁。为了绕过这个限制,可以使用IP隐藏技术和代理爬取。IP隐藏技术包括随机User-Agent、设置Header头信息和使用动态IP代理等方法,而代理爬取则需要注意代理IP地址的可用性、数量和质量,可以使用代理池、随机切换代理和选择优质代理等方式实现。

相关文章:

Python爬虫-IP隐藏技术与代理爬取

前言 在进行爬虫程序开发和运行时,常常会遇到目标网站的反爬虫机制,最常见的就是IP封禁,这时需要使用IP隐藏技术和代理爬取。 一、IP隐藏技术 IP隐藏技术,即伪装IP地址,使得爬虫请求的IP地址不被目标网站识别为爬虫。…...

二刷力扣--链表

链表 链表类型: 单链表(可以访问后面的一个节点) 双链表(可以访问前后节点) 循环链表(最后一个节点指向首节点) 在Python中定义单链表节点: class ListNode:def __init__(self, v…...

返回值加const ,为了不拷贝得到成员的值,但被赋值的左值也要const

1. getA 函数返回值 什么都不加,也改不了c里面a的指针指向 why?返回成员变量时,会复制一下。 返回成员变量时,一般会赋值一下没有RVO_地摊书贩的博客-CSDN博客 2. getA 函数返回值 加了引用, 就没有复制 3. getA 函数…...

本地如何使用HTTPS进行调试

在现代前端开发中,HTTPS已经成为不可或缺的一部分,因为它在保护用户数据和确保网站安全性方面发挥着关键作用。然而,有时在本地开发过程中启用HTTPS可能会变得有些复杂。在本文中,我们将介绍如何轻松地在本地进行HTTPS调试&#x…...

观察者模式:对象之间的订阅机制

欢迎来到设计模式系列的第十三篇文章!在之前的文章中,我们学习了许多常用的设计模式,今天我们将介绍观察者模式,它是一种行为型设计模式,用于定义对象之间的一对多依赖关系,当一个对象的状态发生变化时&…...

【1462. 课程表 IV】

来源:力扣(LeetCode) 描述: 你总共需要上 numCourses 门课,课程编号依次为 0 到 numCourses-1 。你会得到一个数组 prerequisite ,其中 prerequisites[i] [ai, bi] 表示如果你想选 bi 课程,你…...

Kerberos 身份验证

简介 Kerberos 是一种由 MIT(麻省理工大学)提出的一种基于加密 Ticket 的身份认证协议。它旨在通过使用密钥加密技术为客户端/服务器应用程序提供强身份验证,用于验证用户或主机的标识。。 适用范围:Windows Server 2022、Window…...

R语言贝叶斯METROPOLIS-HASTINGS GIBBS 吉布斯采样器估计变点指数分布分析泊松过程车站等待时间...

原文链接:http://tecdat.cn/?p26578 指数分布是泊松过程中事件之间时间的概率分布,因此它用于预测到下一个事件的等待时间,例如,您需要在公共汽车站等待的时间,直到下一班车到了(点击文末“阅读原文”获取…...

通付盾入选2023年度“上市苗圃工程”重点企业

近日,2023年度苏州工业园区企业上市苗圃工程认定名单公示,江苏通付盾科技有限公司成功入选园区“上市苗圃工程”重点企业。 2023年第一批次苗圃企业认定结果: 企业上市苗圃工程 上市企业是衡量地方综合经济实力的重要标尺,也是区…...

SpringMVC之文件上传下载

SpringMVC是一个基于Java的Web框架,它提供了一套用于构建Web应用程序的开发模型。在SpringMVC中,文件上传和下载是常见的功能之一。 SpringMVC文件上传和下载的介绍: 介绍文件上传: 在SpringMVC中,文件上传功能可以通…...

嵌入式IDE(2):KEIL中SCF分散加载链接文件详解和实例分析

在上一篇文章IAR中ICF链接文件详解和实例分析中,我通过I.MX RT1170的SDK中的内存映射关系,分析了IAR中的ICF链接文件的语法。对于MCU编程所使用的IDE来说,IAR和Keil用得比较多,所以这一篇文章就来分析一下Keil的分散文件.scf(scat…...

Linux防火墙常用操作及端口开放

Linux防火墙常用操作及端口开放 1.查看防火墙状态 firewall-cmd --state 2.开启防火墙 systemctl start firewalld.service 3.开启指定端口 firewall-cmd --zonepublic --add-port3306/tcp --permanent firewall-cmd --zonepublic --add-port6379/tcp --permanent 显示success表…...

[JAVAee]Linux上的javax.mail报错

我们把在window写的项目部署到Linux上的Tomcat时,如果发现使用不了了,该如何找到错误呢?找到报错的地方在哪呢? 在Linux环境下来到Tomcat目录下的logs目录,输入: tail -f catalina.out -n 500 tail 就是把文件的末尾几行读取到终端上,并会持续刷新 -f 循环读取 catalina.ou…...

开学季|校园迎新哪家强?VR全景来导航

九月开学迎新季,各大高校的迎新活动开展的如火如荼,随着科技的不断进步,高校为了更好的开展迎新活动,让新生们尽快熟悉新的校园和生活,会利用VR全景技术带领着新生进行校园游览,给予新生们巨大便利的同时&a…...

el-checkbox-group限制勾选数量

<!--* Description: 视频监控 页面* Author: mhf* Date: 2023-08-15 13:26:33 --> <template><div class"videoSurveillance"><el-row :gutter"24"><el-col :span"4"><div class"videoSurveillance-left&…...

【JavaScript】WebAPI入门到实战

文章目录 一、WebAPI背景知识1. 什么是WebAPI&#xff1f;2. 什么是API&#xff1f; 二、DOM基本概念三、获取元素三、事件初识1. 点击事件2. 键盘事件 四、操作元素1. 获取/修改元素内容2. 获取/修改元素属性3. 获取/修改表单元素属性4. 获取/修改样式属性 五、操作节点1. 新增…...

奥康的高尔夫鞋,圈不住投资者的心

文 | 螳螂观察 作者 | 青月 鞋服行业终于熬过了“寒冬”&#xff0c;2023年行业景气度开始逐步回暖。 东方财富Choice数据显示&#xff0c;截至8月17日&#xff0c;已有28家鞋帽服装类上市公司发布了2023年中期业绩预告或快报&#xff0c;其中&#xff0c;9家预增&#xff0…...

vue2配置环境变量并且nginx运行成功

需求&#xff1a;我在vue项目配置了生产环境和开发环境&#xff0c;之后通过proxy代理的方式把地址转发到真实的服务器地址上用于请求接口&#xff0c;之后把项目打包后上传到nginx上&#xff0c;之后接口报错404&#xff0c;但是本地运行是可以访问的&#xff0c;找了很久终于…...

Java+Swing形成GUI图像界面

一、Swing 简介 Swing 主要用来开发 GUI 程序,GUI(Graphical User Interface)即图形用户界面。Java 中针对 GUI 设计提供了丰富的类库,这些类分别位于 java.awt 和 java.swing 中,简称 AWT 和 Swing ;其中,AWT(Abstract Window Toolkit)是抽象窗口工具包,是 Java 平…...

编辑距离 -- 动规

72. 编辑距离 给出动规的两种常见实现形式&#xff1a;自顶向下、自底向上&#xff0c;前者一般借助递归函数备忘录实现&#xff0c;后者通常基于dp数组实现。 class MinDistance:"""72. 编辑距离https://leetcode.cn/problems/edit-distance/""&quo…...

douyin【商品抢购js脚本】

文章目录 前言订阅须知知识点源码前言 脚本主要用来实现抢购douyin商城、直播间秒杀商品等一系列商品 订阅须知 订阅后,只提供js源代码,不提供教学,请根据源码自行抓包知识点 1、在查询串插入一个固定的键rstr   2、对查询串进行按键排序并取值,对空格和+进行转义为a …...

常见Web安全技术总结!474页Web安全从入门到精通(附PDF)

Web安全范围比较大&#xff0c;知识点比较杂&#xff0c;很多朋友都无从下手&#xff0c;这不可怕&#xff0c;可怕的是乱下手&#xff0c;其实往往基础才是决定你是否能走远的关键。 为了帮助大家入门网安&#xff0c;给大家推荐一份《新手Web安全入门到精通》&#xff0c;共…...

Prometheus 监控指南:如何可靠地记录数字时间序列数据

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f405;&#x1f43e;猫头虎建议程序员必备技术栈一览表&#x1f4d6;&#xff1a; &#x1f6e0;️ 全栈技术 Full Stack: &#x1f4da…...

rsync远程同步+inotify监控

目录 一、Rsync 简介 1、rsync是什么 2、备份的方式 3、rsync同步方式 4、常用rsync命令 5、配置源的两种表达方法 二、rsync实验 1、本地复制 ​编辑​编辑 2、异地复制 2.1 rsync服务器配置 2.2 rsync客户端配置 2.2.1 普通同步 2.2.2 免密同步 2.2.3 --delet…...

【面试经典150 | 数组】移除元素

文章目录 写在前面Tag题目来源题目解读解题思路方法一&#xff1a;原地操作 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法&#xff0c;两到三天更新一篇文章&#xff0c;欢迎催更…… 专栏内容以分析题目为主&#xff0c;并附带一些对于本题涉及到的数据结构等…...

玩转Mysql系列 - 第21篇:什么是索引?

这是Mysql系列第21篇。 本文开始连续3篇详解mysql索引&#xff1a; 第1篇来说说什么是索引&#xff1f; 第2篇详解Mysql中索引的原理 第3篇结合索引详解关键字explain 本文为索引第一篇&#xff1a;我们来了解一下什么是索引&#xff1f; 路人在搞计算机之前&#xff0c;…...

预处理指令

// The include directive instructs the preprocessor to paste the text of the given file into the current file. // 粘贴指定文件的内容 #include // 定义宏PI #define PI 3.1415926 // 取消定义PI #undef PI条件编译(Conditional Compilation) // 检查xxx是否已被定义为…...

强大的JTAG边界扫描(1):基本原理介绍

文章目录 1. 什么是边界扫描&#xff1f;2. JTAG硬件接口3. 边界扫描相关的软硬件4. 学习资料5. 总结 我是怎么了解到边界扫描的呢&#xff1f; 这就要从我淘到一块FPGA板卡的事情说起了。 前段时间我在某二手平台上淘了一块FPGA板子&#xff0c;它长这样&#xff1a; 板子的…...

【C++】源文件.cpp和头文件.h分离编程

优势介绍 将C代码分为头文件&#xff08;.h&#xff09;和源文件&#xff08;.cpp&#xff09;的做法有以下几个好处&#xff1a; 模块化和代码组织&#xff1a;将函数和类的声明&#xff08;包括函数原型、类的成员和属性等&#xff09;放在头文件中&#xff0c;将函数和类的…...

报错ssh: Could not resolve hostname

…按照网上好多教程试了一下&#xff1a; 新建密钥&#xff0c;添加到gitee&#xff0c;重新测试。修改host&#xff0c;加入gitee的ip地址到里面去。修改.gifconfig配置文件&#xff0c;配置成ssh的仓库链接。 这上面的方法都不行&#xff0c;后面发现一篇文章&#xff1a;SS…...

网站页面一般做多大/爱站网综合查询

在Android SDK Manager 中安装Android 8.1.0 SDK Platform时报错导致无法安装。错误信息&#xff1a;Downloading SDK Platform Android 8.1.0, API 27, revision 1 Download finished with wrong size. Expected 65606517 bytes, got 65738431 bytes.1、如图在SDK Manager中选…...

保定官网seo分析/seo站点是什么意思

试验网站#1搜索引擎优化收录情况记录(断续运行)日期Yahoogooglebaidusogou每日收录每日收录增量每日收录每日收录增量每日收录每日收录增量每日收录每日收录增量2007-6-24288 333 1060 4813 2007-6-25164013523330108020481302007-6-26空间超过6月流量限制……&#xff0c;…...

多媒体网站开发实战/班级优化大师官方网站

问题描述 PackageKit&#xff0c;包管理服务&#xff0c;通过 DBus 接口&#xff0c;执行某些简单的包管理任务&#xff0c;比如刷新缓存&#xff0c;安装、更新、移除软件等等。 但是该服务经常占用大量 CPU 资源&#xff0c;非常多&#xff0c;而且一直有人反馈这个问题&…...

宁波网站建设 首选智尚网络/宁波网站推广优化公司怎么样

1、安装dns server库 yum install bind dind-devel -y 2、/etc/目录下编辑named.conf&#xff0c;修改dns server监听ip。 vim /etc/named.conf 找到listen-on port&#xff0c;把大括号中的IP改成any或者监听接口的IP。any表示监听所有IP。 3、/etc/目录下&#xff0c;编辑…...

网站虚拟视频主持人/网络上如何推广网站

继续教育 / 网络教育 / 高中起点本科东北师范大学计算机科学与技术专业(高起本层次)招生院校&#xff1a; 东北师范大学继续教育学院专业代码&#xff1a;学制年限&#xff1a; 5年专业分类&#xff1a; 继续教育 / 网络教育 / 高中起点本科查看办学资质预报名报名信息由招生单…...

做论坛网站价格/百度推广

原文地址&#xff1a;http://dev.mysql.com/tech-resources/articles/hierarchical-data.html 作者&#xff1a;Mike Hillyer 翻译&#xff1a;陈建平 chinaontologygmail.com 摘要&#xff1a;无限分级的树状结构往往很难处理&#xff0c;作者推荐“嵌套集合模型”方法&…...