如题,笔者最近在寻找自建ip池的过程中遇到了一些问题,这些问题并不复杂,主要是一些细节,但是由于笔者之前没有遇到过这些情况所以花了不少时间来解决这些问题,以下先介绍自建ip池的一种方法。
自建ip池的逻辑其实很简单,可以分为四个部分:
第一部分:获取ip
从免费ip代理 站中,通过爬取 页源代码的方式将这些ip获取。这部分其实就是涉及到基础的 页爬虫知识。
第二部分:存储ip
第二部分为什么要单独罗列出来呢为所谓的存储ip并不是简单的把获取的ip存储下来,我们并不是要所有获取的ip,而是要把获取的ip中,效果特别好的,比较稳定的作为最终的存储(注意,这里强调的是最终的存储)。所以第二部分存储ip实际上还连接着判断ip代理性能的第三部分————检测模块。当然,存储模块本身还需具有另一些判断,例如判断ip是否具有重复情况等。一般来说,存储部分会使用到Redis这一软件。
第三部分:检测ip效果
这部分笔者直接引用崔庆才《python3 络爬虫开发实战》中给出的方法。即通过一种对ip进行评分的方式进行检测。方法的逻辑也很简单,使用获取的ip登录某一 站,这个 站可以是你最终想要爬取的某个 站,可以是某个不会封禁ip的 站。读者可能会有疑问,如何确保每个ip都能够被快速检测呢里便需要用到异步,代码中使用的是aiohttp异步的方式。(显然,大家也可以通过多线程或者多进程的方式检测)。
第四部分:API接口
第四部分其实就是获取已经评分后的好ip的方式。实际上,这部分有两种方法,第一种方法是通过存储ip这部分中的RedisClilent类来实现,此类中有一个random方法可以返回ip。
那么,关于自建ip池的具体代码,可以直接通过一个github上的开源代码下载即可,代码 址如下
GitHub – Python3WebSpider/ProxyPool: An Efficient ProxyPool with Getter, Tester and Server
读者只需要通过该 站将代码的zip压缩文件下载下来即可。
接下来便是笔者下载并压缩该文件之后遇到的问题了……
问题一概述:笔者将下载下来的压缩文件放到了某一文件夹中,注意,我是直接放到某一文件中的,而不是把压缩的文件夹作为一个单独的文件。于是,笔者就发现了一个问题,即代码中最开始的引用部分出现了很多红线,具体如下图所示:
我在当时百思不得其解,以为是pycharm版本或者库出现了什么问题。后面搜索了一下关于 PyCharm里from…import…出现波浪线标红的情况,才知道这是Pycharm中项目工作区的问题,即当用户还没运行某一文件的时候,Pycharm会默认为将项目文件夹作为工作区,在上图中,便是我创建的名称为ip池的这一文件作为工作区。那么如何使工作区变为ProxyPool-master这一文件呢/p>
步骤如下:在文件选项中选中下面的设置选项
然后选择项目结构
然后点击添加内容根下的删除键
接下来点击添加内容根,将ProxyPool-master作为内容根文件夹即可。
这样开头的波浪线便能去除了。
问题二概述:笔者是在2022的8月9 使用的该代码,这时代码中添加了部分库,笔者在使用的时候Pycharm中提示了不满足软件包要求。即部分库的版本不符合或者没安装某库。需要安装的库实际上在文件夹中的某一txt文件中,该文件名为requirements.txt,里面罗列了需要的各个库。
当时,笔者直接通过点击提示进行库的安装,但是没有成功。所以又尝试了另一些方法,例如,按照官方的提示,通过
pip3 install -r requirements.txt进行依赖包的安装,实际上,具体代码应该写为 pip install -r绝对路径/requirements.txt,绝对路径可以通过文件属性中的文件位置找到。当然,这种方法也失败了。
如果读者尝试了以上两种方法后仍然失败,便可以通过在控制台或者终端里面直接pip install 库名一个个安装,例如对于第一个库——environs>=9.3.0,<10.0.0,读者只需要pip install environs==9.3.0即可。笔者成功安装了上述库,除了其中的一个库——meinheld>=1.0.0,<2.0.0。
结果提示出现以下错误:
明明有1.0.0的库,为什么无法安装际上这似乎是因为系统的问题,笔者使用的windows系统会出现一个问题,这个问题便是图片里面最上面提到的,Are you really running a posix compliant OSe posix compliant is mandatory.
所谓的posix实际上是一个unix操作系统的软件,(必须要在linux上才能运行),所以windows系统是没法安装这个库的,但这并不影响,因为笔者尝试运行了下程序发现是没有问题的。
问题三:笔者成功运行了run.py程序,登录了localhost:5555/random这一端口,但是在关闭了程序之后又重新打开,发现localhost:5555再也无法进去了。经过询问之后才知道,似乎是ip池第一次运行后关闭时没有完全关闭,我解决的方法是通过重启电脑,之后便没有出现这个问题了。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!