2

Python 爬虫和 Python 爬虫IP池服务

 1 year ago
source link: https://www.2808proxy.com/practical-application-of-crawler/crawler-ip-pool/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Python 爬虫和 Python 爬虫IP池服务

为保证所有爬虫获取其网站的合法代理IP地址,保证爬虫的快速可靠运行,公司为分布式深网爬虫建立了稳定的代理池服务。 当然,在公司完成的工作不能开源。 但在我自己的时间里,我想利用一些开源工具来构建一个简单的代理池服务。

代理IP来自哪里?

我访问了西刺、快代理等免费代理的网站,让自己在不使用代理IP的情况下爬取了一定的代理功能。 当然,如果你的代理接口优越,你也可以自己访问。

免费代理集合同样非常简单,仅包含以下内容:访问页面-> 正则表达式/XPath 提取-> 保存

代理质量如何保证?

大多数免费代理 IP 地址无疑是不可用的; 否则,为什么其他人继续支付? (但事实是很多代理的付费IP地址也是不稳定的,很多都用不上)。 因此,无法直接使用获取的代理 IP 地址。

您可以使用这些代理创建重复访问稳定网站的检测程序,以检查它们是否可以正常使用。 因为检测代理是一个非常慢的操作,这个过程可以使用多个线程或异步技术来实现。

如何存储收集到的代理?

NoSQL数据库SSDB,性能好,支持代理Redis多种数据格式,是我们这里不得不推荐的。 支持 T 级数据、队列、哈希、集合和 k-v 配对。 它是分布式爬虫中间存储的有用工具。

这些代理如何更快地被爬虫使用?

服务必须是解决方案。 您可以使用各种可用的 Web 框架之一,为爬虫程序创建一个 API 以在 Python 中使用。 这提供了很多好处。 例如,如果爬虫发现无法使用代理,它可能会决定使用 API 删除代理 IP。 当爬虫发现代理池IP地址不足时,可能会决定访问刷新代理池。 这比检测程序更值得信赖。

Python爬虫IP池的设计

python 爬虫 IP 池有四个组件:

代理获取器:

检索代理接口。 目前有五个免费代理资源可用。 每次调用都会收集并存储五个网站的最新代理。 您可以独立添加更多代理检索接口;

用于将代理 IP 地址保存在文件中。 目前仅支持 SSDB。 您可以阅读这篇文章,了解有关我们决定使用 SSDB 的更多信息。 就个人而言,我认为 SSDB 是 Redis 的高级替代品。 如果您从未这样做过,安装 SSDB 很简单。 有关更多详细信息,请参见此处;

计划任务的用户经常检查数据库的代理可用性并删除任何不可用的代理。 同时会主动使用ProxyGetter将最近的proxy添加到DB中;

代理API:

代理池的对外接口是Flask,学习和使用需要两个小时,因为代理池功能现在已经很简单了。 为了更方便直接使用爬虫,该函数提供了get、delete、refresh等接口。

Python 的动态类型、动态绑定和高级数据结构使其成为快速应用程序开发以及将预先存在的软件组件粘合在一起的理想选择。 使用 Python 创建这个代理 IP 地址池也很容易。 代码中有六个模块:

API 相关代码 API 目前使用 Flask 实现,代码非常简单。 Flask 接收客户端请求。 Flask调用ProxyManager的实现,包括get、delete、refresh、get all;

与数据库相关的代码。 SSDB 目前用于数据库。 为了方便以后扩展到其他类型的数据库,代码以工厂模式投入使用;

get、delete、refresh、get all的具体接口实现类。 目前,代理池只负责管理代理。 将来,可能会提供其他功能,例如代理和帐户绑定以及绑定代理和爬虫。

代理获取器:

据测试,代理目前搜索免费代理的五个网站:迅捷代理、代理66、代理、西贝代理、果版家,现在每家都只有60或70个代理可用。 他们无疑也提供自己的扩展代理接口。

计划任务的代码不再用于例行代码刷新和检查可用代理之外的任何其他用途。 使用多个进程;

包含几个标准的模块函数或方法,例如读取配置文件的GetConfig。 即 class 重写 ConfigParser 使其区分大小写的类是由 ConfigParse 集成的。 Singleton:实现Singleton,LazyProperty:计算类属性的惯性。 等等;

配置。 ini是配置文件。 你可以在Config中注册一个新的代理获取方式。 ini 并添加一个到 GetFreeProxy;

下载代码:

Python

git clone [email protected]: jhao104/proxy_pool.git 或者直接去https://github.com/jhao104/proxy_pool 下载zip文件 git clone [email protected]: jhao104/proxy_pool.git 或者直接去 到 https://github.com/jhao104/proxy_pool 下载 zip 文件

安装要求:

Python

pip install -r requirements.txtpip install -r requirements.txt

Python

需要分别启动定时任务和config的api。 在 ini 中将您的 SSDB 配置到计划目录:>>> python ProxyRefreshSchedule。 py 到 Api 目录: >>> python ProxyApi. py需要分别启动定时任务和api到Config。 在 ini 中将您的 SSDB 配置到计划目录:>>> python ProxyRefreshSchedule。 py 到 Api 目录: >>> python ProxyApi. py

所有获取代理都将输入数据库并在预定活动开始后由代理确认。 该任务每 20 分钟自动运行一次。 一旦计划任务运行一两分钟,可用代理就会在 SSDB 中刷新:

有用的代理

ProxyApi 之后可以通过浏览器中的接口获取代理。 py已经启动:

获取所有页面:

此 API 可以通过包装为函数在爬虫代码中使用。 例如:

Python

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)}) # ….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)}) # ….

上面提到的Python爬虫IP池服务希望它对你有用。 如果您有任何疑问,请联系我们。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK