目标反爬虫怎么办?实践出真知-scrapy集成动态ip代理(以阿布云为例)

简介: 360截图20180712215548501.jpg一、前言在爬虫行当,每天都要面对目标反爬虫技术,我们想要拿到数据,就需要针对它们的反爬虫来制定绕过方法,比如它识别你的UserAgent,那你可能就需要伪造、它限制IP请求次数,你可能就需要限速或者改变ip、它用验证码来识别你是人是机,你就需要模拟人的操作并且正确填写它给你弹出的验证码等等。
360截图20180712215548501.jpg

一、前言

在爬虫行当,每天都要面对目标反爬虫技术,我们想要拿到数据,就需要针对它们的反爬虫来制定绕过方法,比如它识别你的UserAgent,那你可能就需要伪造、它限制IP请求次数,你可能就需要限速或者改变ip、它用验证码来识别你是人是机,你就需要模拟人的操作并且正确填写它给你弹出的验证码等等。

这里我以实际项目举例:有个项目需要爬取中国证券协会,对方使用的反爬虫手段中就有IP请求次数的限制,因为我需要的数据比较多,而且目标的数据很绕,所以我紧紧降低我爬虫的速度我觉得对我影响很大,所以我选择通过动态ip切换来应对,我需要在scrapy中实现ip自动切换,才能够在客户要求的时间内完成爬取任务。

在此之前,我用过第三方库scrapy-proxys加上芝麻ip的代理api接口,可能是之前代码没有调整好,导致的没有能够成功。(后面有机会再测试)。

二、阿布云范例

阿布云官方给出了python和scrapy的示例代码

文档python3示例

from urllib import request

# 要访问的目标页面
targetUrl = "http://test.abuyun.com/proxy.php"

# 代理服务器
proxyHost = "http-dyn.abuyun.com"
proxyPort = "9020"

# 代理隧道验证信息
proxyUser = "H01234567890123D"
proxyPass = "0123456789012345"

proxyMeta = "http://%(user)s:%(pass)s@%(host)s:%(port)s" % {
    "host" : proxyHost,
    "port" : proxyPort,
    "user" : proxyUser,
    "pass" : proxyPass,
}

proxy_handler = request.ProxyHandler({
    "http"  : proxyMeta,
    "https" : proxyMeta,
})

#auth = request.HTTPBasicAuthHandler()
#opener = request.build_opener(proxy_handler, auth, request.HTTPHandler)

opener = request.build_opener(proxy_handler)

request.install_opener(opener)
resp = request.urlopen(targetUrl).read()

print (resp)                        

上面的是官方提供的python原生写法,下面还有官方提供的scrapy写法:

文档scrapy示例

import base64

# 代理服务器
proxyServer = "http://http-dyn.abuyun.com:9020"

# 代理隧道验证信息
proxyUser = "H012345678901zyx"
proxyPass = "0123456789012xyz"

# for Python2
proxyAuth = "Basic " + base64.b64encode(proxyUser + ":" + proxyPass)

# for Python3
#proxyAuth = "Basic " + base64.urlsafe_b64encode(bytes((proxyUser + ":" + proxyPass), "ascii")).decode("utf8")

class ProxyMiddleware(object):
    def process_request(self, request, spider):
        request.meta["proxy"] = proxyServer

        request.headers["Proxy-Authorization"] = proxyAuth 

这里在scrapy项目中的Middleware里面写即可。

三、正式集成

将它集成到scrapy框架中,那就在项目工程的middlewares.py中新增类及key等信息:

import base64

""" 阿布云ip代理key配置 """
proxyServer = "http://http-dyn.abuyun.com:9020"
proxyUser = "HWFHQ5YP14Lxxx"
proxyPass = "CB8D0AD56EAxxx"
# for Python3
proxyAuth = "Basic " + base64.urlsafe_b64encode(bytes((proxyUser + ":" + proxyPass),     "ascii")).decode("utf8")


class ABProxyMiddleware(object):
    """ 阿布云动态ip代理中间件 """
    def process_request(self, request, spider):
        request.meta["proxy"] = proxyServer
        request.headers["Proxy-Authorization"] = proxyAuth

然后再到settings.py中启用刚才编写的中间件:

DOWNLOADER_MIDDLEWARES = {

   #'Securities.middlewares.SecuritiesDownloaderMiddleware': None,

    'Securities.middlewares.ABProxyMiddleware': 1,
}

四、注意事项

阿布云动态ip默认是1秒钟请求5次,(可以加钱,购买多次)。所以,当他是默认5次的时候,我需要对爬虫进行限速,还是在settings.py中,空白处新增如下代码:

""" 启用限速设置 """
AUTOTHROTTLE_ENABLED = True
AUTOTHROTTLE_START_DELAY = 0.2  # 初始下载延迟
DOWNLOAD_DELAY = 0.2  # 每次请求间隔时间

当然了,如果你加钱增加每秒次数的话,可以不用考虑限速的问题。

最后

即可完成阿布云动态代理ip在scrapy中的的集成,尽情的爬吧!

学习是一通百通的,既然阿布云平台的示例代码可以集成到框架中,那么其他平台的示例代码同样可以集成到框架中使用,我就不多写了。

如果你想真的学会这个技巧,你就应该自己去实践,自己动手编写代码并测试,才能够掌握在自己手中。

目录
相关文章
|
数据采集 监控 数据库
爬虫技术详解:从原理到实践
本文详细介绍了爬虫技术,从基本概念到实际操作,涵盖爬虫定义、工作流程及Python实现方法。通过使用`requests`和`BeautifulSoup`库,演示了如何发送请求、解析响应、提取和保存数据,适合初学者学习。强调了遵守法律法规的重要性。
4573 4
|
9月前
|
数据采集 机器学习/深度学习 边缘计算
Python爬虫动态IP代理报错全解析:从问题定位到实战优化
本文详解爬虫代理设置常见报错场景及解决方案,涵盖IP失效、403封禁、性能瓶颈等问题,提供动态IP代理的12种核心处理方案及完整代码实现,助力提升爬虫系统稳定性。
523 0
|
11月前
|
数据采集 人工智能 边缘计算
爬虫IP代理效率优化:策略解析与实战案例
本文深入探讨了分布式爬虫中代理池效率优化的关键问题。首先分析了代理效率瓶颈的根源,包括不同类型代理的特点、连接耗时及IP失效问题。接着提出了六大核心优化策略:智能IP轮换矩阵、连接复用优化、动态指纹伪装、智能重试机制等,并结合电商价格监控、社交媒体舆情分析和金融数据抓取三个实战案例,展示了优化效果。同时建立了三维效率评估体系,从质量、成本和稳定性全面衡量性能。最后展望了AI驱动调度、边缘计算融合等未来演进方向,帮助爬虫系统实现从“暴力采集”到“智能获取”的进化,大幅提升效率并降低成本。
461 0
|
数据采集
动态代理与静态代理在爬虫解析的优缺点
随着科技和互联网的发展,越来越多企业需要使用代理进行数据抓取。本文介绍了HTTP动态代理与静态代理的区别,帮助您根据具体需求选择最佳方案。动态代理适合大规模、高效率的爬取任务,但稳定性较差;静态代理则适用于小规模、高稳定性和速度要求的场景。选择时需考虑目标、数据量及网站策略。
289 4
|
数据采集 XML 存储
构建高效的Python网络爬虫:从入门到实践
本文旨在通过深入浅出的方式,引导读者从零开始构建一个高效的Python网络爬虫。我们将探索爬虫的基本原理、核心组件以及如何利用Python的强大库进行数据抓取和处理。文章不仅提供理论指导,还结合实战案例,让读者能够快速掌握爬虫技术,并应用于实际项目中。无论你是编程新手还是有一定基础的开发者,都能在这篇文章中找到有价值的内容。
|
数据采集 存储 XML
Python实现网络爬虫自动化:从基础到实践
本文将介绍如何使用Python编写网络爬虫,从最基础的请求与解析,到自动化爬取并处理复杂数据。我们将通过实例展示如何抓取网页内容、解析数据、处理图片文件等常用爬虫任务。
2131 1
|
数据采集 中间件 定位技术
新手爬虫er必刷!如何使用代理IP全攻略!
在爬虫开发中,代理IP是规避IP封锁和请求频率限制的重要工具,通过分散请求压力并模拟不同地理位置,提高数据抓取稳定性和成功率。本文详细介绍了代理IP的基本概念、选择服务的关键因素、获取及使用方法,包括Python中的Requests库和Scrapy框架的具体应用,以及IP管理与轮换策略,帮助新手掌握代理IP的使用技巧。
|
数据采集 Java 数据挖掘
Java IO异常处理:在Web爬虫开发中的实践
Java IO异常处理:在Web爬虫开发中的实践
|
数据采集 存储 JavaScript
构建你的第一个Python爬虫:从理论到实践
【8月更文挑战第27天】本文旨在为初学者提供一个关于如何构建简单Python网络爬虫的指南。我们将从网络爬虫的基础概念讲起,然后通过一个实际的项目案例来展示如何抓取网页数据,并将其存储在本地文件中。文章将介绍必要的工具和库,并逐步引导读者完成一个简单的爬虫项目,以加深对网络数据抓取过程的理解。
|
数据采集 Rust 安全
Rust在网络爬虫中的应用与实践:探索内存安全与并发处理的奥秘
【8月更文挑战第31天】网络爬虫是自动化程序,用于从互联网抓取数据。随着互联网的发展,构建高效、安全的爬虫成为热点。Rust语言凭借内存安全和高性能特点,在此领域展现出巨大潜力。本文探讨Rust如何通过所有权、借用及生命周期机制保障内存安全;利用`async/await`模型和`tokio`运行时处理并发请求;借助WebAssembly技术处理动态内容;并使用`reqwest`和`js-sys`库解析CSS和JavaScript,确保代码的安全性和可维护性。未来,Rust将在网络爬虫领域扮演更重要角色。
318 1
下一篇
开通oss服务