irpas技术客

proxy_pool开源项目攻克学习_桃之夭夭?

irpas 5985

开源项目攻克学习之proxy_pool 1. 学习背景

爬虫线程池,但是网络上付费的又很麻烦,于是在开源网站上找到一个版本进行学习。

https://github.com/jhao104/proxy_pool

本人操作系统deepin,有遇到一些问题,希望可以跟大家分享一下。

2. 学习路程是我个人安装时候踩的坑。

3. 总结安装可以参考总结安装的顺序进行安装。


2. 学习路程 step1. 下载

首先是进行代码下载,没啥好说的

git clone https://github.com/jhao104/proxy_pool.git

如果下载速度慢的话,作者还给了release源码下载,源码地址如下,下载zip或者tar.gz格式都可以。

https://github.com/jhao104/proxy_pool/releases/tag/2.4.0

step2. 准备python环境

有两种方法:

一种是准备单独的python环境

另一种是配置虚拟机

准备一个单独的python环境,我没用虚拟机,而是基于我原来的一个教程,重新build了一个python版本。

环境准备如下linux环境下安装多个任意版本的python环境

我准备的环境是python3.7.11

~/proxy_pool-2.4.0$ python3711 Python 3.7.11 (default, Aug 26 2021, 02:56:09) [GCC 6.3.0 20170516] on linux Type "help", "copyright", "credits" or "license" for more information. >>> step3. 根据教程安装依赖 ~/proxy_pool-2.4.0$ pip3711 install -r requirement -i https://pypi.tuna.tsinghua.edu.cn/simple/

等待安装完成有一些告警,但我不知道有什么影响。

WARNING: The script flask is installed in '/home/rodney/.local/bin' which is not on PATH. Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location. WARNING: The script chardetect is installed in '/home/rodney/.local/bin' which is not on PATH. Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location. WARNING: The scripts gunicorn and gunicorn_paster are installed in '/home/rodney/.local/bin' which is not on PATH. Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location. step4. 开始启动程序 + 解决报错问题:安装redis # 启动调度程序 python proxyPool.py schedule # 启动webApi服务 python proxyPool.py server

发现报错了,说是这个问题

redis.exceptions.ConnectionError: Error 111 connecting to 172.16.8.128:6379. Connection refused.

上网查询了一下是没有安装redis的问题(原来requirement.txt的只是个接口。。。)解决思路就两行。。。

然后去查找了一下redis的安装方法

因为我是deepin系统,和ubuntu类似,直接用apt-get安装即可(下次在服务器上安装时候再研究centos的)

sudo apt-get install redis

安装完成后,他的配置文件在如下位置,我们可以打开看下,但不用修改。

/etc/redis/redis.conf

利用apt-get安装后,可以直接用命令启动redis服务器,第一次进去需要设置密码,否则不能用。

参考资料:

NOAUTH Authentication required 解决办法

redis远程访问

Python连接redis

# 启动redis服务器 $ redis-server # 给他配置密码 redis-cli 127.0.0.1:6379> set key pwd 127.0.0.1:6379> get key 127.0.0.1:6379> config set requirepass "123456" 127.0.0.1:6379> auth "123456" 127.0.0.1:6379> ping pong step5. 修改setting.py

然后继续按教程走,

HOST 不用改,PORT也可以不用改,这是你flask打开的默认地址,

数据库需要改一下,pwd改成你刚才设置的"123456"或者你自己设置的值。

端口改成6379。因为我们没有改redis-server的地址。

其他的不用动。然后再启动python脚本。

# setting.py 为项目配置文件 # 配置API服务 HOST = "0.0.0.0" # IP PORT = 5000 # 监听端口 # 配置数据库 DB_CONN = 'redis://:pwd@127.0.0.1:8888/0' # 配置 ProxyFetcher PROXY_FETCHER = [ "freeProxy01", # 这里是启用的代理抓取方法名,所有fetch方法位于fetcher/proxyFetcher.py "freeProxy02", # .... ] step6. 启动程序 + 第二次解决问题 # 启动调度程序 python proxyPool.py schedule # 启动webApi服务 python proxyPool.py server

第一个schedule能正常执行了,但是执行server时候报错,错误内容如下:

Traceback (most recent call last): File "proxyPool.py", line 43, in <module> cli() File "/home/rodney/.local/lib/python3.7/site-packages/click/core.py", line 764, in __call__ return self.main(*args, **kwargs) File "/home/rodney/.local/lib/python3.7/site-packages/click/core.py", line 717, in main rv = self.invoke(ctx) File "/home/rodney/.local/lib/python3.7/site-packages/click/core.py", line 1137, in invoke return _process_result(sub_ctx.command.invoke(sub_ctx)) File "/home/rodney/.local/lib/python3.7/site-packages/click/core.py", line 956, in invoke return ctx.invoke(self.callback, **ctx.params) File "/home/rodney/.local/lib/python3.7/site-packages/click/core.py", line 555, in invoke return callback(*args, **kwargs) File "proxyPool.py", line 39, in server startServer() File "/home/rodney/Open_Source/py_github/proxy_pool_dl/proxy_pool-2.4.0/helper/launcher.py", line 25, in startServer from api.proxyApi import runFlask File "/home/rodney/Open_Source/py_github/proxy_pool_dl/proxy_pool-2.4.0/api/proxyApi.py", line 20, in <module> from flask import Flask, jsonify, request File "/home/rodney/.local/lib/python3.7/site-packages/flask/__init__.py", line 21, in <module> from .app import Flask, Request, Response File "/home/rodney/.local/lib/python3.7/site-packages/flask/app.py", line 25, in <module> from . import cli, json File "/home/rodney/.local/lib/python3.7/site-packages/flask/json/__init__.py", line 21, in <module> from itsdangerous import json as _json ImportError: cannot import name 'json' from 'itsdangerous' (/home/rodney/.local/lib/python3.7/site-packages/itsdangerous/__init__.py)

研究一下啊发现应该是flask库内部导包出现问题。因为webapi依赖flask,而调度程序不依赖flask

这里我尝试将flask的库从1.0.0改为2.0.0解决问题

$ pip3711 install Flask==2.0

最终的执行结果如下:

step7. 其他的错误以及debug

如果出现如下错误,请重启redis服务器。

$ redis-server


3.总结安装Proxy_pool的顺序过程 1. 准备环境 python环境 -> step2redis服务器 -> step4 2. 下载安装开源代码

下载开源代码 -> step1

安装开源代码的依赖 -> step3

配置setting -> step5

3. 启动proxy_pool 根据启动命令启动代理池服务 python proxyPool.py server 4. 问题定位 遇到Flask包导包问题可以考虑重装Flask版本遇到连接失败connection error通常是redis服务器没打开,可以考虑重新打开


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #2 #学习路程是我个人安装时候踩的坑 #3