0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何让爬虫更简单的使用这些代理?

马哥Linux运维 来源:未知 作者:李倩 2018-06-04 17:03 次阅读

爬虫代理IP池

公司做分布式深网爬虫,搭建了一套稳定的代理池服务,为上千个爬虫提供有效的代理,保证各个爬虫拿到的都是对应网站有效的代理IP,从而保证爬虫快速稳定的运行,当然在公司做的东西不能开源出来。不过呢,闲暇时间手痒,所以就想利用一些免费的资源搞一个简单的代理池服务。

1、问题

代理IP从何而来?刚自学爬虫的时候没有代理IP就去西刺、快代理之类有免费代理的网站去爬,还是有个别代理能用。当然,如果你有更好的代理接口也可以自己接入。免费代理的采集也很简单,无非就是:访问页面页面 —> 正则/xpath提取 —> 保存

如何保证代理质量?可以肯定免费的代理IP大部分都是不能用的,不然别人为什么还提供付费的(不过事实是很多代理商的付费IP也不稳定,也有很多是不能用)。所以采集回来的代理IP不能直接使用,可以写检测程序不断的去用这些代理访问一个稳定的网站,看是否可以正常使用。这个过程可以使用多线程或异步的方式,因为检测代理是个很慢的过程。

采集回来的代理如何存储?这里不得不推荐一个高性能支持多种数据结构的NoSQL数据库SSDB,用于代理Redis。支持队列、hash、set、k-v对,支持T级别数据。是做分布式爬虫很好中间存储工具。

如何让爬虫更简单的使用这些代理?答案肯定是做成服务咯,python有这么多的web框架,随便拿一个来写个api供爬虫调用。这样有很多好处,比如:当爬虫发现代理不能使用可以主动通过api去delete代理IP,当爬虫发现代理池IP不够用时可以主动去refresh代理池。这样比检测程序更加靠谱。

2、代理池设计

代理池由四部分组成:

ProxyGetter:代理获取接口,目前有5个免费代理源,每调用一次就会抓取这个5个网站的最新代理放入DB,可自行添加额外的代理获取接口;

DB:用于存放代理IP,现在暂时只支持SSDB。至于为什么选择SSDB,大家可以参考这篇文章,个人觉得SSDB是个不错的Redis替代方案,如果你没有用过SSDB,安装起来也很简单,可以参考这里;

Schedule:计划任务用户定时去检测DB中的代理可用性,删除不可用的代理。同时也会主动通过ProxyGetter去获取最新代理放入DB;

ProxyApi:代理池的外部接口,由于现在这么代理池功能比较简单,花两个小时看了下Flask,愉快的决定用Flask搞定。功能是给爬虫提供get/delete/refresh等接口,方便爬虫直接使用。

3、代码模块

Python中高层次的数据结构,动态类型和动态绑定,使得它非常适合于快速应用开发,也适合于作为胶水语言连接已有的软件部件。用Python来搞这个代理IP池也很简单,代码分为6个模块:

Api:api接口相关代码,目前api是由Flask实现,代码也非常简单。客户端请求传给Flask,Flask调用ProxyManager中的实现,包括get/delete/refresh/get_all;

DB:数据库相关代码,目前数据库是采用SSDB。代码用工厂模式实现,方便日后扩展其他类型数据库;

Manager:get/delete/refresh/get_all等接口的具体实现类,目前代理池只负责管理proxy,日后可能会有更多功能,比如代理和爬虫的绑定,代理和账号的绑定等等;

ProxyGetter:代理获取的相关代码,目前抓取了快代理、代理66、有代理、西刺代理、guobanjia这个五个网站的免费代理,经测试这个5个网站每天更新的可用代理只有六七十个,当然也支持自己扩展代理接口;

Schedule:定时任务相关代码,现在只是实现定时去刷新代码,并验证可用代理,采用多进程方式;

Util:存放一些公共的模块方法或函数,包含GetConfig:读取配置文件config.ini的类,ConfigParse: 集成重写ConfigParser的类,使其对大小写敏感,Singleton:实现单例,LazyProperty:实现类属性惰性计算。等等;

其他文件:配置文件:Config.ini,数据库配置和代理获取接口配置,可以在GetFreeProxy中添加新的代理获取方法,并在Config.ini中注册即可使用;

4、安装

下载代码:

git clone git@github.com:jhao104/proxy_pool.git或者直接到https://github.com/jhao104/proxy_pool 下载zip文件

安装依赖:

pip install -r requirements.txt

启动:

需要分别启动定时任务和api到Config.ini中配置你的SSDB到Schedule目录下:>>>python ProxyRefreshSchedule.py到Api目录下:>>>python ProxyApi.py

5、使用

定时任务启动后,会通过代理获取方法fetch所有代理放入数据库并验证。此后默认每20分钟会重复执行一次。定时任务启动大概一两分钟后,便可在SSDB中看到刷新出来的可用的代理:

启动ProxyApi.py后即可在浏览器中使用接口获取代理,一下是浏览器中的截图:index页面:

get页面:

get_all页面:

爬虫中使用,如果要在爬虫代码中使用的话, 可以将此api封装成函数直接使用,例如:

import requestsdef get_proxy(): return requests.get("http://127.0.0.1:5000/get/").contentdef delete_proxy(proxy): requests.get("http://127.0.0.1:5000/delete/?proxy={}".format(proxy))# your spider codedef spider(): # .... requests.get('https://www.example.com', proxies={"http": "http://{}".format(get_proxy)}) # ....

6、最后

时间仓促,功能和代码都比较简陋,以后有时间再改进。喜欢的在github上给个star。感谢!

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 代码
    +关注

    关注

    30

    文章

    4748

    浏览量

    68355
  • python
    +关注

    关注

    56

    文章

    4782

    浏览量

    84453
  • 爬虫
    +关注

    关注

    0

    文章

    82

    浏览量

    6840

原文标题:Python爬虫代理池

文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    什么语言适合写爬虫

    和框架实际上也要花费不少时间。比如我接触的 Scrapy,配环境就配了两天,对于里面复杂的结构更是云里雾里,任何爬虫都可以只使用几个简单的库来实现,虽然耗费了很多时间,但是对整个 HTTP 流程有了
    发表于 01-14 13:51

    什么语言适合写爬虫

    和框架实际上也要花费不少时间。比如我接触的 Scrapy,配环境就配了两天,对于里面复杂的结构更是云里雾里,任何爬虫都可以只使用几个简单的库来实现,虽然耗费了很多时间,但是对整个 HTTP 流程有了
    发表于 02-03 13:22

    爬虫使用http代理的目的

    。通常一些爬虫开发者为了能够正常的采集数据,会选择减慢采集速度或者是去网上找一些免费的代理ip,但是网上很多的免费ip都不可用,可用的也很可能不稳定,因此怎么样在不侵犯对方利益的前提下正常的采集
    发表于 02-04 12:37

    网络爬虫之关于爬虫http代理的常见使用方式

    网络链接,代理平台自动实现毫秒级代理IP切换,保证了网络稳定性和速度,避免爬虫客户在代理IP策略优化上投入精力。这种方式适用于专做爬虫的用户
    发表于 04-26 17:43

    使用爬虫代理错误问题解决方案

    的时候也会遇到各种问题。爬虫代理HTTP状态码问题解决方案:代理使用失败对方截图看看代理代码,代理
    发表于 08-21 17:28

    网络爬虫nodejs爬虫代理配置

    。就算验证码通过了,也不会采集到数据,这也就是所谓的反爬虫策略。所以这种情况下,越来越多的网络爬虫会利用代理IP去进行采集。目标网站限制了一个IP,可以换一个代理IP继续进行业务采集。
    发表于 09-01 17:23

    Golang爬虫语言接入代理

    都是可以写出一个爬虫系统的。无论用什么爬虫语言框架,长期使用一个IP去采集数据,肯定会收到限制。这种时候就需要使用爬虫代理去解决问题。golang
    发表于 09-09 17:41

    Python爬虫速成指南你快速的学会写一个最简单爬虫

    本文主要内容:以最短的时间写一个最简单爬虫,可以抓取论坛的帖子标题和帖子内容。 本文受众:没写过爬虫的萌新。
    的头像 发表于 06-10 09:57 7075次阅读
    Python<b class='flag-5'>爬虫</b>速成指南<b class='flag-5'>让</b>你快速的学会写一个最<b class='flag-5'>简单</b>的<b class='flag-5'>爬虫</b>

    如何维护爬虫程序中的代理ip库?

    数据。是做分布式爬虫很好中间存储工具。如何爬虫简单的使用这些
    发表于 12-21 10:53 324次阅读

    高匿动态爬虫代理ip怎么选择?

    爬虫采集的工程师们对高匿动态爬虫代理ip肯定不陌生,也接触过不少爬虫代理ip的提供商家,那么对于爬虫
    发表于 12-24 09:41 752次阅读

    Python爬虫:工作者常用的动态IP代理

    爬虫工作者应该经常要与代理ip工具打交道,根据不同的抓取网站,大家要调用不同类型的动态ip代理
    的头像 发表于 06-28 16:29 3341次阅读

    Python爬虫:安全级别高的代理ip爬虫

    现在是大数据的时代,无论是哪一个行业,对于数据都是有必要了解的,特别是代理ip在爬虫中的使用。
    的头像 发表于 06-28 16:29 2810次阅读

    python实现简单爬虫的资料说明

    本文档的主要内容详细介绍的是python实现简单爬虫的资料说明。
    发表于 11-02 17:53 21次下载
    python实现<b class='flag-5'>简单</b><b class='flag-5'>爬虫</b>的资料说明

    利用Python编写简单网络爬虫实例

    利用 Python编写简单网络爬虫实例2 实验环境python版本:3.3.5(2.7下报错
    发表于 02-24 11:05 14次下载

    详细解读爬虫多开代理IP的用途,以及如何配置!

    爬虫多开代理IP是一种在爬虫开发中常用的技术策略,主要用于提高数据采集效率、避免IP被封禁以及获取地域特定的数据。
    的头像 发表于 09-14 07:55 434次阅读