新手教程 | Python Scrapy框架HTTP代理的配置与调试

简介: 做过python爬虫的都知道,HTTP代理的设置时要在发送请求前设置好,那HTTP代理的逻辑点在哪里呢?实际上,只需要在Scrapy 的项目结构中添加就好

本文分为两部分:


一、HTTP代理的逻辑


做过python爬虫的都知道,HTTP代理的设置时要在发送请求前设置好,那HTTP代理的逻辑点在哪里呢?实际上,只需要在Scrapy 的项目结构中添加就好,具体代码如下:

# Scrapy 内置的 Downloader Middleware 为 Scrapy 供了基础的功能, # 定义一个类,其中(object)可以不写,效果一样 classSimpleProxyMiddleware(object): 
# 声明一个数组          proxyList= ['你购买的HTTP代理地址'] 
# Downloader Middleware的核心方法,只有实现了其中一个或多个方法才算自定义了一个 Downloader Middleware def process_request(self, request, spider): # 随机从其中选择一个,并去除左右两边空格 proxy=random.choice(self.proxyList).strip() 
# 打印结果出来观察 print("this is request ip:"+proxy) 
# 设置request的proxy属性的内容为代理ip request.meta['proxy'] =proxy# Downloader Middleware的核心方法,只有实现了其中一个或多个方法才算自定义了一个Downloader Middleware def process_response(self, request, response, spider): # 请求失败不等于200 ifresponse.status!=200: 
# 重新选择一个代理ip proxy=random.choice(self.proxyList).strip() 
print("this is response ip:"+proxy) 
# 设置新的代理ip内容 request.mete['proxy'] =proxyreturnrequestreturnresponse

每个 Downloader Middleware 定义了一个或多个方法的类,核心的方法有如下三个:

1.process_request(request, spider)

2.process_response(request,response, spider)

3.process_exception(request, exception, spider)

找到 setting.py 文件中的这块区域:

#DDWNLQADER_MIDDLEWARES = {#        *images.middlewares.ImagesDownloaderMiddleware": 543,#    *images middlewares,LocalProxyMiddleware*: 100#}


这部分需要修改,也就是取消注释,加上刚刚写的Middleware 类的路径:

#DDWNLQADER_MIDDLEWARES = {'scrapydownloadertest.middlewares.SimpleProxyMiddleware': 100,
|}

这样,我们就配置好了一个简单的HTTP代理,此时来到httpProxyIp.py 这个文件, 这个文件是我通过命令 scrapy genspider httpProxyIp icanhazip.com 生成的,创建成功内容如下:

# -*- coding: utf-8 -*-importscrapyclassHttpproxyipSpider(scrapy.Spider):
name='httpProxyIp'allowed_domains= ['icanhazip.com']
start_urls= ['http://icanhazip.com/']
defparse(self, response):
pass


修改一下,最终代码如下所示:

# -*- coding: utf-8 -*-importscrapyfromscrapy.cmdlineimportexecuteclassHttpproxyipSpider(scrapy.Spider):
# spider 任务名name='httpProxyIp'# 允许访问的域名allowed_domains= ['icanhazip.com']
# 起始爬取的urlstart_urls= ['http://icanhazip.com/']
# spider 爬虫解析的方法,关于内容的解析都在这里完成; self表示实例的引用,response爬虫的结果defparse(self, response):
print('代理后的ip: ', response.text)
# 这个是main函数也是整个程序入口的惯用写法if__name__=='__main__':
execute(['scrapy', 'crawl', 'httpbin'])

以上,就完成了Scrapy代理的设置和验证调试。


PS:icanhazi是一个显示当前访问者ip的网站,可以很方便的用来验证scrapy的HTTP代理设置是否成功。

二、如何配置动态的HTTP代理?


免费的可用率太低了,我用的是青果网络提供的服务。在控制台那可以获取台哦是工具,可以直接线上简单对接调试,测试HTTP代理资源替换、释放和通道配额等信息。


1.请求方式

请求方式包括POST和GET,默认POST请求,根据自己的需求选择;右侧网址则是接口网址完整信息,包括选择的key、接口方法等参数信息。

2.key

key为必选项,是对接接口的必要信息。key的选择根据登录状态不同,可操作性不同。未登录时,需手动输入key值,已登录时,可下拉选择已购买的代理业务key,key信息附带业务资源配置和业务备注信息,方便辨别业务。

未登录状态:

已登录状态:

3.接口方法

接口方法主要是选择要调试的接口类型,包括资源相关、IP白名单、信息查询三大模块,各个接口说明详情如下图:

接口类型

API

描述

通用资源管理相关

- allocate

- extract

- replace

- release

- query

 - 调用 allocate申请HTTP代理资源

- 调用extract获取IP资源池全部可用的IP信息

- 调用replace用于释放并申请新的HTTP代理,更换IP资源

- 调用release释放申请到的IP,以便于再次进行IP申请

- 调用query查询用户可用的HTTP代理资源列表

独占代理专用相关

- monopolize_resources

- monopolize_resources

- monopolize_resources

-monopolize_resources/newest_ips

-monopolize_resources/idle

 - 用POST调用接口申请独占资源

-用GET调用接口查询可用的独占资源

- 用DELETE调用接口释放独占资源

-用PUT调用接口请求重拨独占资源

-用GET调用接口查询空闲的独占资源

白名单管理相关

- whitelist/query

- whitelist/add

- whitelist/del

 - 调用 whitelist/query用于查询IP的白名单

- 调用whitelist/add用于添加IP的白名单

- 调用whitelist/del用于删除IP的白名单

资源信息查询

- info/quota

- resources

- 调用 info/quota查询IP提取余量

- 调用resources查询平台可用的HTTP代理资源列表

4.参数类型

调试工具中各个参数根据不同的接口类型对应显示,各个参数有不同的含义,详情如下:

参数名

是否必选

描述

Key

要申请IP的业务的Key值,下拉选择即可;

IP

HTTP代理;多个以逗号分割;*代表全部;

Num

申请的IP个数,默认1个,最大不超过套餐内IP数量最大值;

KeepAlive

IP生存周期,其中动态独享默认24小时,动态共享默认购买的套餐存活周期时长;

AreaId

区域ID;默认随机;

ISP

运营商ID;默认随机;1:电信,2:移动,3:联通,4:BGP

Detail

是否获取代理IP的详情,默认为 0关闭,1为开启;

Distinct

申请的IP是否去重,默认为0不去重,1为开启去重;动态共享代理、动态独享代理适用。

DataFormat

数据格式,本接口取值:json、html、txt ,默认为 json格式

DataSeparator

分隔符,自定义

5.结果参数说明

点击“测试”,右侧文本框区域显示接口请求结果,返回结果参数说明:

参数名

描述

Code

申请IP结果编码:0(成功)-1(失败)。

TaskID

接口请求任务ID,可通过该IP释放该任务所申请到的IP;

Total

获取到的代理IP总数量

Available

获取到的代理IP可用数量

Used

获取到代理IP已使用数量

Num

申请的代理IP数量

TotalNum

总IP数,主要是资源查询

Data

代理IP数据信息,包含节点IP、端口、失效日期

Msg

公共参数,本接口取值:区域ID.

部分转载自: https://www.lsjlt.com/news/160957.html

相关文章
|
6月前
|
Java 数据处理 索引
(Pandas)Python做数据处理必选框架之一!(二):附带案例分析;刨析DataFrame结构和其属性;学会访问具体元素;判断元素是否存在;元素求和、求标准值、方差、去重、删除、排序...
DataFrame结构 每一列都属于Series类型,不同列之间数据类型可以不一样,但同一列的值类型必须一致。 DataFrame拥有一个总的 idx记录列,该列记录了每一行的索引 在DataFrame中,若列之间的元素个数不匹配,且使用Series填充时,在DataFrame里空值会显示为NaN;当列之间元素个数不匹配,并且不使用Series填充,会报错。在指定了index 属性显示情况下,会按照index的位置进行排序,默认是 [0,1,2,3,...] 从0索引开始正序排序行。
472 0
|
6月前
|
存储 Java 数据处理
(numpy)Python做数据处理必备框架!(一):认识numpy;从概念层面开始学习ndarray数组:形状、数组转置、数值范围、矩阵...
Numpy是什么? numpy是Python中科学计算的基础包。 它是一个Python库,提供多维数组对象、各种派生对象(例如掩码数组和矩阵)以及用于对数组进行快速操作的各种方法,包括数学、逻辑、形状操作、排序、选择、I/0 、离散傅里叶变换、基本线性代数、基本统计运算、随机模拟等等。 Numpy能做什么? numpy的部分功能如下: ndarray,一个具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组 用于对整组数据进行快速运算的标准数学函数(无需编写循环)。 用于读写磁盘数据的工具以及用于操作内存映射文件的工具。 线性代数、随机数生成以及傅里叶变换功能。 用于集成由C、C++
550 1
|
6月前
|
Java 数据挖掘 数据处理
(Pandas)Python做数据处理必选框架之一!(一):介绍Pandas中的两个数据结构;刨析Series:如何访问数据;数据去重、取众数、总和、标准差、方差、平均值等;判断缺失值、获取索引...
Pandas 是一个开源的数据分析和数据处理库,它是基于 Python 编程语言的。 Pandas 提供了易于使用的数据结构和数据分析工具,特别适用于处理结构化数据,如表格型数据(类似于Excel表格)。 Pandas 是数据科学和分析领域中常用的工具之一,它使得用户能够轻松地从各种数据源中导入数据,并对数据进行高效的操作和分析。 Pandas 主要引入了两种新的数据结构:Series 和 DataFrame。
652 0
|
6月前
|
Java 数据处理 索引
(numpy)Python做数据处理必备框架!(二):ndarray切片的使用与运算;常见的ndarray函数:平方根、正余弦、自然对数、指数、幂等运算;统计函数:方差、均值、极差;比较函数...
ndarray切片 索引从0开始 索引/切片类型 描述/用法 基本索引 通过整数索引直接访问元素。 行/列切片 使用冒号:切片语法选择行或列的子集 连续切片 从起始索引到结束索引按步长切片 使用slice函数 通过slice(start,stop,strp)定义切片规则 布尔索引 通过布尔条件筛选满足条件的元素。支持逻辑运算符 &、|。
340 0
|
6月前
|
缓存 负载均衡 网络协议
HTTP 与 SOCKS5 代理协议:企业级选型指南与工程化实践
面向企业网络与数据团队的代理协议选型与治理指南,基于流量特征选择HTTP或SOCKS5协议,通过多协议网关统一出站,结合托管网络降低复杂度,实现稳定吞吐、可预测时延与合规落地。
|
6月前
|
网络安全 开发工具 git
在GitLab CI中同步HTTPS仓库地址的yaml配置
最后,提交并推送 `.gitlab-ci.yml`文件到您的GitLab仓库。GitLab CI/CD将自动识别这个文件,并在每次推送到 `master`分支时执行定义的同步任务。
325 16
|
7月前
|
数据采集 存储 XML
Python爬虫技术:从基础到实战的完整教程
最后强调: 父母法律法规限制下进行网络抓取活动; 不得侵犯他人版权隐私利益; 同时也要注意个人安全防止泄露敏感信息.
985 19
|
6月前
|
索引 Python
Python 列表切片赋值教程:掌握 “移花接木” 式列表修改技巧
本文通过生动的“嫁接”比喻,讲解Python列表切片赋值操作。切片可修改原列表内容,实现头部、尾部或中间元素替换,支持不等长赋值,灵活实现列表结构更新。
296 1
|
Web App开发 测试技术 网络安全
全面解析HTTP/2:历史、特性、调试、性能
相比之前的传输协议,HTTP/2在底层方面做了很多优化。有安全、省时、简化开发、更好的适应复杂页面、提供缓存利用率等优势,阿里云早在去年发布的CDN6.0服务就已正式支持HTTP/2,访问速度最高可提升68%。今天我们从历史、特性、调试、性能四个层面来全面解析HTTP/2
11467 0
全面解析HTTP/2:历史、特性、调试、性能
|
11月前
|
安全 网络协议 Linux
Linux网络应用层协议展示:HTTP与HTTPS
此外,必须注意,从HTTP迁移到HTTPS是一项重要且必要的任务,因为这不仅关乎用户信息的安全,也有利于你的网站评级和粉丝的信心。在网络世界中,信息的安全就是一切,选择HTTPS,让您的网站更加安全,使您的用户满意,也使您感到满意。
333 18

推荐镜像

更多