0

0

Scrapy如何使用代理IP、user agent、Cookies来避免反爬虫策略

王林

王林

发布时间:2023-06-23 13:22:40

|

2384人浏览过

|

来源于php中文网

原创

随着网络爬虫的发展,越来越多的网站和服务器为了防止被恶意爬取数据,开始采用反爬虫策略进行防护。这些策略包括ip封禁、user agent检测、cookies验证等等。若没有相应的应对策略,我们的爬虫程序就很容易被标记为恶意爬虫并被封禁。因此,为了避免这种情况出现,我们需要在scrapy框架的爬虫程序中应用代理ip、user agent以及cookies等策略。本文将详细介绍这三种策略的应用方法。

  1. 代理IP

代理IP可以有效地变换我们的真实IP地址,这样就可以防止服务器检测到我们的爬虫程序。同时,代理IP还可以让我们有机会在多个IP下进行爬取,从而避免单一IP频繁请求而被封禁的情况发生。

在Scrapy中,我们可以使用middlewares(中间件)来实现代理IP的设置。首先,我们需要在settings.py中进行相关的配置,例如:

DOWNLOADER_MIDDLEWARES = {
    'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware': None,
    'scrapy.downloadermiddlewares.retry.RetryMiddleware': None,
    'scrapy_proxies.RandomProxy': 100,
    'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware': 110,
}

在上述配置中,我们使用了scrapy_proxies库来实现代理IP的设置。其中,100表示优先级,数值越小越优先。这样设置后,在请求过程中,Scrapy将会随机地从代理IP池中选择一个IP地址来进行请求。

当然,我们也可以自定义代理IP源。例如,我们可以使用免费代理IP网站提供的API来获取代理IP。代码示例如下:

class GetProxy(object):
    def __init__(self, proxy_url):
        self.proxy_url = proxy_url

    def get_proxy_ip(self):
        response = requests.get(self.proxy_url)
        if response.status_code == 200:
            json_data = json.loads(response.text)
            proxy = json_data.get('proxy')
            return proxy
        else:
            return None


class RandomProxyMiddleware(object):
    def __init__(self):
        self.proxy_url = 'http://api.xdaili.cn/xdaili-api//greatRecharge/getGreatIp?spiderId=e2f1f0cc6c5e4ef19f884ea6095deda9&orderno=YZ20211298122hJ9cz&returnType=2&count=1'
        self.get_proxy = GetProxy(self.proxy_url)

    def process_request(self, request, spider):
        proxy = self.get_proxy.get_proxy_ip()
        if proxy:
            request.meta['proxy'] = 'http://' + proxy

在上述代码中,我们定义了一个RandomProxyMiddleware类,并使用了Requests库来获取代理IP。通过在请求头中加入代理IP,我们就可以实现代理IP的设置了。

  1. user agent

user agent是标识请求头中的一部分,包含了发起请求的设备、操作系统、浏览器等信息。许多服务器在处理请求时,都会通过请求头中的user agent信息来判断请求是否为爬虫,从而进行反爬虫处理。

同样地,在Scrapy中,我们可以使用middlewares来实现user agent的设置。例如:

Cutout.Pro
Cutout.Pro

AI驱动的视觉设计平台

下载
class RandomUserAgent(object):
    def __init__(self):
        self.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']
                  
    def process_request(self, request, spider):
        user_agent = random.choice(self.user_agents)
        request.headers.setdefault('User-Agent', user_agent)

在上述代码中,我们定义了一个RandomUserAgent类,并随机选择了一个User-Agent作为请求头中的user agent信息。这样,即使我们的爬虫程序发送了大量请求,也可以避免被服务器认为是恶意爬虫。

  1. Cookies

Cookies是服务器在响应请求时,通过响应头中的Set-Cookie字段返回的一段数据。当浏览器再次向该服务器发起请求时,将会在请求头中包含之前的Cookies信息,从而实现登录验证等操作。

同样地,在Scrapy中,我们也可以通过middlewares来实现Cookies的设置。例如:

class RandomCookies(object):
    def __init__(self):
        self.cookies = {
            'example_cookie': 'example_value'
        }
                  
    def process_request(self, request, spider):
        cookie = random.choice(self.cookies)
        request.cookies = cookie

在上述代码中,我们定义了一个RandomCookies类,并随机选择了一个Cookies作为请求头中的Cookies信息。这样我们就可以在请求过程中通过设置Cookies实现登录验证操作了。

总结

在利用Scrapy进行数据爬取的过程中,避免反爬虫策略的思路和方式是非常关键的。本文详细介绍了如何通过Scrapy中的middlewares来设置代理IP、user agent、Cookies等策略,使爬虫程序更加隐蔽和安全。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
什么是中间件
什么是中间件

中间件是一种软件组件,充当不兼容组件之间的桥梁,提供额外服务,例如集成异构系统、提供常用服务、提高应用程序性能,以及简化应用程序开发。想了解更多中间件的相关内容,可以阅读本专题下面的文章。

178

2024.05.11

Golang 中间件开发与微服务架构
Golang 中间件开发与微服务架构

本专题系统讲解 Golang 在微服务架构中的中间件开发,包括日志处理、限流与熔断、认证与授权、服务监控、API 网关设计等常见中间件功能的实现。通过实战项目,帮助开发者理解如何使用 Go 编写高效、可扩展的中间件组件,并在微服务环境中进行灵活部署与管理。

217

2025.12.18

免费爬虫工具有哪些
免费爬虫工具有哪些

免费爬虫工具有Scrapy、Beautiful Soup、ParseHub、Octoparse、Webocton Scriptly、RoboBrowser和Goutte。更多关于免费爬虫工具的问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

772

2023.11.10

cookie
cookie

Cookie 是一种在用户计算机上存储小型文本文件的技术,用于在用户与网站进行交互时收集和存储有关用户的信息。当用户访问一个网站时,网站会将一个包含特定信息的 Cookie 文件发送到用户的浏览器,浏览器会将该 Cookie 存储在用户的计算机上。之后,当用户再次访问该网站时,浏览器会向服务器发送 Cookie,服务器可以根据 Cookie 中的信息来识别用户、跟踪用户行为等。

6429

2023.06.30

document.cookie获取不到怎么解决
document.cookie获取不到怎么解决

document.cookie获取不到的解决办法:1、浏览器的隐私设置;2、Same-origin policy;3、HTTPOnly Cookie;4、JavaScript代码错误;5、Cookie不存在或过期等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

347

2023.11.23

阻止所有cookie什么意思
阻止所有cookie什么意思

阻止所有cookie意味着在浏览器中禁止接受和存储网站发送的cookie。阻止所有cookie可能会影响许多网站的使用体验,因为许多网站使用cookie来提供个性化服务、存储用户信息或跟踪用户行为。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

414

2024.02.23

cookie与session的区别
cookie与session的区别

本专题整合了cookie与session的区别和使用方法等相关内容,阅读专题下面的文章了解更详细的内容。

93

2025.08.19

C++ 设计模式与软件架构
C++ 设计模式与软件架构

本专题深入讲解 C++ 中的常见设计模式与架构优化,包括单例模式、工厂模式、观察者模式、策略模式、命令模式等,结合实际案例展示如何在 C++ 项目中应用这些模式提升代码可维护性与扩展性。通过案例分析,帮助开发者掌握 如何运用设计模式构建高质量的软件架构,提升系统的灵活性与可扩展性。

8

2026.01.30

c++ 字符串格式化
c++ 字符串格式化

本专题整合了c++字符串格式化用法、输出技巧、实践等等内容,阅读专题下面的文章了解更多详细内容。

8

2026.01.30

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
黑马程序员JavaScript视频教程
黑马程序员JavaScript视频教程

共107课时 | 28万人学习

妙味课堂JS高级专题篇视频教程
妙味课堂JS高级专题篇视频教程

共15课时 | 2.5万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号