大家好,今天来为大家解答高效Python爬虫代理解决方案这个问题的一些问题点,包括也一样很多人还不知道,因此呢,今天就来为大家分析分析,现在让我们一起来看看吧!如果解决了您的问题,还望您关注下本站哦,谢谢~
1. 问题
代理IP从哪里来?
刚开始自学爬虫的时候,我没有代理IP,就去西沙、快代理等有免费代理的网站爬虫。仍然有一些代理可以使用。当然,如果你有更好的代理接口,也可以自己连接。
免费代理的收集也很简单,无非就是:访问页面页面--正则/xpath提取--保存
如何保证代理质量?
肯定大部分免费代理IP都不能用,不然别人怎么会提供付费IP(但事实是很多代理的付费IP不稳定,很多都不能用)。因此,收集到的代理IP不能直接使用。您可以编写一个检测程序,不断使用这些代理来访问稳定的网站,看看是否可以正常使用。该过程可以是多线程的或异步的,因为检测代理是一个缓慢的过程。
收集到的代理如何保存?
不得不推荐SSDB,一个支持多种数据结构的高性能NoSQL数据库,用于代理Redis。支持队列、哈希、集合、k-v对和T级数据。是分布式爬虫非常好的中间存储工具。
如何让爬虫更容易使用这些代理呢?
答案肯定是把它变成一种服务。 Python 有很多Web 框架。随便选一个,写个API供爬虫调用即可。这有很多好处。例如,当爬虫发现代理无法使用时,可以通过API主动删除代理IP。当爬虫发现代理池IP不够时,可以主动刷新代理池。这比检测程序更可靠。
2. 代理池设计
代理池由四部分组成:
ProxyGetter:
代理获取接口目前有5个免费代理源。每次调用时,都会捕获这5个网站的最新代理并将其放入数据库中。您可以自行添加额外的代理获取接口;
DB:
用于存储代理IP,目前仅支持SSDB。至于为什么选择SSDB,可以参考这篇文章。我个人认为SSDB 是一个很好的Redis 替代品。如果您没有使用过SSDB,安装非常简单。您可以参考这里;
时间表:
计划任务用户定期检查数据库中的代理可用性并删除不可用的代理。同时也会通过ProxyGetter主动获取最新的代理并放入DB中;
加入群923414804,免费获取数十套PDF资料,帮助你学习python
ProxyApi:
至于代理池的对外接口,由于现在代理池功能比较简单,所以我花了两个小时看了Flask,很高兴决定使用Flask来处理。作用是为爬虫提供获取/删除/刷新等接口,方便爬虫直接使用。
3. 代码模块
Python 的高级数据结构、动态类型和动态绑定使其非常适合快速应用程序开发以及作为连接现有软件组件的粘合语言。使用Python创建这个代理IP池也非常简单。代码分为6个模块:
API:
api接口相关代码。目前该api是通过Flask实现的,代码非常简单。客户端请求传递给Flask,Flask调用ProxyManager中的实现,包括get/delete/refresh/get_all;
DB:
数据库相关代码,当前数据库使用SSDB。代码采用工厂模式实现,方便以后扩展其他类型的数据库;
经理:
get/delete/refresh/get_all等接口的具体实现类。目前,代理池仅负责管理代理。未来可能会有更多的功能,比如代理与爬虫的绑定、代理与账户的绑定等;
ProxyGetter:
代理获取的相关代码目前捕获了快代理、代理66、优代理、西沙代理、国办家五个网站的免费代理。经过测试,这五个网站每天只有六十、七十个可用的代理更新。当然,也支持自己扩展代理接口;
时间表:
与计划任务相关的代码现在仅实现定期刷新代码并验证可用代理,采用多进程的方式;
实用程序:
存放一些公共模块方法或函数,包括读取配置文件config.ini的GetConfig:集成重写ConfigParser使其区分大小写的类ConfigParse:实现单例的Singleton:实现懒惰的LazyProperty:类属性的计算。 ETC;
其他文件:
配置文件:Config.ini,数据库配置和代理获取接口配置,可以在GetFreeProxy中添加新的代理获取方法并注册到Config.ini中使用;
4. 安装
下载码:
gitclone git@github.com:jhao104/proxy_pool.git 或直接前往https://github.com/jhao104/proxy_pool 下载zip文件
安装依赖项:
pipinstall -r 要求.txt
开始:
需要在Config.ini中分别启动定时任务和api,将你的SSDB配置为Schedule目录下的:python ProxyRefreshSchedule.py到Api目录下的:python ProxyApi.py
5. 使用
定时任务启动后,所有的agent都会通过agent获取方法取入数据库并进行验证。此后,默认每20 分钟重复一次。定时任务启动后大约一两分钟,可以看到SSDB中刷新了可用的agent:
启动ProxyApi.py后,就可以使用浏览器中的接口来获取代理了。这是浏览器:中的截图
索引页:
获取页面:
获取所有页面:
如果你还想了解更多这方面的信息,记得收藏关注本站。
【高效Python爬虫代理解决方案】相关文章:
2.米颠拜石
3.王羲之临池学书
8.郑板桥轶事十则
用户评论
这也太有用了吧!现在不用担心被封ip
有16位网友表示赞同!
最近在学爬虫,这个工具太给力了
有6位网友表示赞同!
想要稳定爬数据,代理池必不可少啊
有11位网友表示赞同!
Python还是蛮好用的,学习曲线不算陡峭
有19位网友表示赞同!
请问能不能支持多类型的代理协议?
有20位网友表示赞同!
代理池的使用好像挺复杂的,有没有教程可以跟着学?
有6位网友表示赞同!
爬虫的频率太高的话会把ip封杀吗?
有14位网友表示赞同!
这个Python爬虫代理池能用在什么地方比较合适?
有18位网友表示赞同!
感觉学习爬虫有点脑阔疼,不过这工具可以用
有9位网友表示赞同!
想问问有没有开源的代理池可以使用?
有6位网友表示赞同!
看文章介绍说可以支持多地域代理吗?
有17位网友表示赞同!
这个Python爬虫代理池稳定可靠吗?不会经常出现问题?
有20位网友表示赞同!
学习爬虫主要是为了收集网站数据?
有18位网友表示赞同!
用Python写的爬虫代码比较安全吗?
有20位网友表示赞同!
现在好多网站都不让爬取了,怎么办呢?
有18位网友表示赞同!
代理池的使用有什么需要注意的吗?
有12位网友表示赞同!
这个工具的使用成本是多少?
有8位网友表示赞同!
感觉学习爬虫很有挑战性啊
有10位网友表示赞同!
爬虫技术真的很棒,可以用来收集很多有用的信息
有5位网友表示赞同!
最近想写个爬虫脚本,试试这个Python爬虫代理池看看效果怎么样.
有15位网友表示赞同!