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

news2024/11/25 20:47:12

前言

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

 一、IP隐藏技术

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

1. 随机User-Agent

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

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

import random

def 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 requests

url = "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 requests

def 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 time

class ProxyPool:
    def __init__(self):
        self.pool = []
        self.index = 0

    def get_proxy(self):
        if len(self.pool) == 0:
            return None
        proxy = self.pool[self.index]
        self.index += 1
        if self.index == len(self.pool):
            self.index = 0
        return proxy

    def 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 True
            return False
        except:
            return False

    def update_pool(self):
        new_pool = []
        for proxy in self.pool:
            if self.check_proxy(proxy):
                new_pool.append(proxy)
        self.pool = new_pool

pool = 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 requests

def 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 requests

def check_proxy(proxy):
    try:
        response = requests.get("http://www.example.com", proxies=proxy, timeout=10)
        if response.status_code == 200:
            return True
        return False
    except:
        return False

proxy = {"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地址的可用性、数量和质量,可以使用代理池、随机切换代理和选择优质代理等方式实现。

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

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

相关文章

网络层IP协议

目录 前言 1.如何理解IP协议 2.IP协议格式 3.网段划分 4.特殊的IP地址 5.IP地址的数量限制 6.私有IP地址和公网IP地址 7.路由 总结 前言 在前面的文章中介绍了关于传输层常用的两个协议,UDP协议和TCP协议,当数据经过传输层之后,进入网…

关于ESP32S3无法识别到端口问题

前言 (1)因为实习问题,需要使用ESP32BOX进行二次开发。一般来说,接触一款MCU,3天上手是基本操作。但是对于乐鑫的芯片,环境搭建是真的折磨人(苦笑),而且官方文档几乎没有…

软件测试———linux

文章目录 基础1. 发展史2 特征3 内核版本号的特征4.发布版5,安装 第二章Linux的常见命令Linux命令vi的使用文件的操作文件的压缩和解压缩文件阅读命令权限的操作用户设置配置系统查看名命令 基础 1. 发展史 unix—>BSD(TCP的使用)---->GNU---->Minix—>linux 2 …

使用Process Explorer查看线程的函数调用堆栈去排查程序高CPU占用问题

目录 1、问题描述 2、使用Process Explorer排查软件高CPU占用的一般思路 3、使用Process Explorer工具进行分析 3.1、找到CPU占用高的线程 3.2、查看CPU占用高的线程的函数调用堆栈,找到出问题的代码 3.3、libwebsockets库导出接口lws_service的说明 3.4、解…

200个常用的Python编程相关英语词汇以及它们的中文释义

大家好,我是涛哥。 好多小伙伴反馈说在学习python的过程中,遇到的英文比较多,为自己的学习和开发产生了很大的阻力,所以为大家梳理了一份 Python编程相关常用的英语词汇以及它们的中文释义,当你刚开始学习Python编程的…

SpringBoot整合Easy-ES操作演示文档

文章目录 SpringBoot整合Easy-ES操作演示文档1 概述及特性1.1 官网1.2 主要特性 2 整合配置2.1 导入POM2.2 Yaml配置2.3 EsMapperScan 注解扫描2.4 配置Entity2.5 配置Mapper 3 基础操作3.1 批量保存3.2 数据更新3.3 数据删除3.4 组合查询3.5 高亮查询3.6 统计查询 4 整合异常4…

Java“牵手”天猫商品列表页数据采集+商品价格数据排序,商品销量排序数据,天猫商品API采集方法

天猫商品列表API是天猫平台提供给开发者的应用程序编程接口,通过API可以获取天猫平台上商品列表数据。 天猫商品列表API的使用需要获取Access Token,它代表了访问天猫API的身份认证。 天猫商品列表API的使用步骤如下: 开发者在天猫开发者中…

Dokcer创建MySQL容器,并在宿主机或mysql可视化工具中连接mysql容器的数据库

文章目录 一、Docker 创建 MySQL容器1. 拉取 MySQL 镜像2. 创建并运行 MySQL 容器3. 创建并运行 MySQL 容器(目录映射) 二、连接 MySQL 数据库1. 在 MySQL 容器内,连接MySQL2. 在宿主机连接 MySQL(遇到问题及解决方案)…

2023年9月实时获取地图边界数据方法,省市区县街道多级联动【附实时geoJson数据下载】

首先,来看下效果图 在线体验地址:https://geojson.hxkj.vip,并提供实时geoJson数据文件下载 可下载的数据包含省级geojson行政边界数据、市级geojson行政边界数据、区/县级geojson行政边界数据、省市区县街道行政编码四级联动数据&#xff0…

性能测试 —— Jmeter事务控制器

事务: 性能测试中,事务指的是从端到端,一个完整的操作过程,比如一次登录、一次 筛选条件查询,一次支付等;技术上讲:事务就是由1个或多个请求组成的 事务控制器 事务控制器类似简单控制器&…

力扣:94. 二叉树的中序遍历(Python3)

题目: 给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。 来源:力扣(LeetCode) 链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 示例: 示例 1: 输…

问道管理:突然飙涨!10分钟暴拉10倍

杠杆资金动手了,还是大手笔! Wind数据显现,9月11日融资客净买入255.41亿元,创2020年7月14日以来新高。这一方面因为,9月11日起,融资保证金份额首次下调正式落地,投资者融资买入证券时的融资保证…

通达信指标编写,16进制颜色对照表,妈妈再也不用担心颜色不够用了!!

★★★★★博文创作不易,我的博文不需要打赏,也不需要知识付费,可以白嫖学习小技巧,喜欢的老铁可以多多点赞收藏分享置顶,小红牛在此表示感谢。★★★★★ #龙虎榜小红牛系统,官方微信公众号:g…

机器学习算法详解3:逻辑回归

机器学习算法详解3:逻辑回归 前言 ​ 本系列主要对机器学习上算法的原理进行解读,给大家分享一下我的观点和总结。 本篇前言 ​ 本篇对逻辑回归的算法原理进行解读。 目录结构 文章目录 机器学习算法详解3:逻辑回归1. 引子2. sigmoid函数3. 原…

C++之shared_ptr、unique_ptr、make_shared、make_unique的区别(一百九十七)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…

vue3之pinia简单使用

一、 Pinia介绍 pinia 是 Vue 的存储库,它允许您跨组件/页面共享状态。就是和vuex一样的实现数据共享。 依据Pinia官方文档,Pinia是2019年由vue.js官方成员重新设计的新一代状态管理器,更替Vuex4成为Vuex5。 Pinia 目前也已经是 vue 官方正式…

PackML 学习笔记(2) OPCUA /PackML

2020年11月11日,OPC 基金会发布了PackML 的配套规范(OPC 30050: PackML - Packaging Control)。意味着可以使用OPCUA 信息模型来构建PackML 模型了。 如果写一篇技术简介往往是简单的,要去实现这门技术却很难。首先,OP…

浅谈Dead reckoning实现原理以及常用算法

0. 简介 航位推算是一个很常见的定位方法。在知道当前时刻的位置,然后通过imu等传感器去估计下一个时刻的位置。在自动驾驶车辆定位的时候,GPS提供10Hz的定位信息。这每个GPS信息来临的0.1s的间隔里面,车辆位置也会移动很多。那么这个时候就…

Android.bp语法和使用方法讲解

Android.bp语法和使用方法讲解 Android.bp 文件是什么? Android.bp 文件首先是 Android 系统的一种编译配置文件,是用来代替原来的 Android.mk文件的。在 Android7.0 以前,Android 都是使用 make 来组织各模块的编译,对应的编译…

抖店评价有礼怎么设置|成都瀚网科技

随着电商行业的不断发展和竞争的加剧,如何吸引消费者、提高店铺的口碑成为了每个卖家关注的焦点。其中,抖音电商平台的礼貌评价功能受到广大卖家的青睐。那么,如何设置抖店评论才能有礼貌呢?我们一起来讨论一下吧。 如何设置抖店评…