proxy_pool开源项目攻克学习
开源项目攻克学习之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 pwd127.0.0.1:6379> get key127.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'# 配置 ProxyFetcherPROXY_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 mainrv = self.invoke(ctx)File "/home/rodney/.local/lib/python3.7/site-packages/click/core.py", line 1137, in invokereturn _process_result(sub_ctx.command.invoke(sub_ctx))File "/home/rodney/.local/lib/python3.7/site-packages/click/core.py", line 956, in invokereturn ctx.invoke(self.callback, **ctx.params)File "/home/rodney/.local/lib/python3.7/site-packages/click/core.py", line 555, in invokereturn callback(*args, **kwargs)File "proxyPool.py", line 39, in serverstartServer()File "/home/rodney/Open_Source/py_github/proxy_pool_dl/proxy_pool-2.4.0/helper/launcher.py", line 25, in startServerfrom api.proxyApi import runFlaskFile "/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, requestFile "/home/rodney/.local/lib/python3.7/site-packages/flask/__init__.py", line 21, in <module>from .app import Flask, Request, ResponseFile "/home/rodney/.local/lib/python3.7/site-packages/flask/app.py", line 25, in <module>from . import cli, jsonFile "/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环境 -> step2
- redis服务器 -> step4
2. 下载安装开源代码
下载开源代码 -> step1
安装开源代码的依赖 -> step3
配置setting -> step5
3. 启动proxy_pool
- 根据启动命令启动代理池服务
python proxyPool.py server
4. 问题定位
- 遇到Flask包导包问题可以考虑重装Flask版本
- 遇到连接失败
connection error
通常是redis服务器没打开,可以考虑重新打开
proxy_pool开源项目攻克学习相关推荐
- Android 开源项目及其学习
Android 系统研究:http://blog.csdn.net/luoshengyang/article/details/8923485 Android 腾讯技术人员博客 http://hukai ...
- 开源项目Krita学习(一)
开源项目Krita学习(一) Krita是一个开源的绘画软件,处于对科学技术和人文艺术的追求,我从今日起开始了对此项目的学习. 1.Jenkins CI 进入Krita的github仓库后,一个陌生的 ...
- 开源项目Krita学习(二)
开源项目Krita学习(二) 专有名词记录 nightly版本: 所谓nightly版本,通常是开发者自己维护的一个版本.白天的时候开发者们将各自的修改提交到一个中心代码库,然后在晚上做一次编译得到的 ...
- 读《借助开源项目,学习软件开发》总结
读<借助开源项目,学习软件开发>总结 GitBook文章源地址:文章源地址 一.前言 准备条件:(1)一台能上网的电脑(2)首选系统Ubuntu,其次Windows 二.开始 (1)软件开 ...
- ROS实验笔记之——基于Prometheus自主无人机开源项目的学习与仿真
最近在公众号上看到Prometheus无人机的资料,发现里面开源了很好的无人机的仿真环境,并且有很好的教程.而本人正好在上<Introduction to Aerial Robotics> ...
- 借助开源项目,学习软件开发——开始
借助开源项目,学习软件开发--开始 原文地址:点击打开链接 http://sbbs.me/view_article/506070b108158e166400001b 2. 开始 2.1. 学习软件开 ...
- iOS及Mac开源项目和学习资料
iOS UI 下拉刷新 EGOTableViewPullRefresh – 最早的下拉刷新控件. SVPullToRefresh – 下拉刷新控件. MJRefresh – 仅需一行代码就可以为UI ...
- OS及Mac开源项目和学习资料【超级全面】
UI 下拉刷新 EGOTableViewPullRefresh – 最早的下拉刷新控件. SVPullToRefresh – 下拉刷新控件. MJRefresh – 仅需一行代码就可以为UITable ...
- Android开源项目 资源 学习
转载了一个开源项目的文章,转载一篇有系统总结的文章.感谢博主的慷慨,让我们学习! Android开源项目系列汇总已完成,包括: Android开源项目第一篇--个性化控件(View)篇 Android ...
最新文章
- 《AutoCAD 2016中文版室内装潢设计从入门到精通》——第2章 AutoCAD 2016入门2.1 操作界面...
- 子空间迭代法 matlab,基于MATLAB的一类迭代分析
- 17.IDA-基本块的定义
- cocos2d-x游戏实例(11)-触屏主角移动轨迹
- RunTime.getRunTime().addShutdownHook的用法
- Tomcat部署项目的方法
- @Controller
- 数据挖掘技术之关联分析
- MonoMac 1.0正式发布
- cc2540 android,手机APP通过CC2541蓝牙模块来控制LED等,附安卓APP源码
- vmware 无权输入许可证密钥
- Properties和ResourceBundle类
- AutoCAD查询插件的开发
- 桔梗载药上浮 柴胡升于左 升麻生于右
- final 的三种用法是什么?
- 推荐一款STM32F030K6T6兼容替换灵动MM32F031K6T6
- 扫码签到之动态刷新二维码——给每一帧附加有效期(原理、web 小程序变量共享)
- 二叉树:叶节点的一些操作
- Qpython SL4A服务调用GPS定位获取获取位置信息
- java可以用vs编程吗_vscode可以写java么_编程开发工具
热门文章
- Fun 3.0 发布——资源部署、依赖下载、代码编译等功能又又又增强啦!
- 目标检测算法图解:一文看懂RCNN系列算法
- 带您探究云存储的奥秘,三分钟帮您快速了解OSS
- Web 自动化神器,批量下载美图,可直接导入使用
- 你和大厂的匹配度多高?立马去C认证测试一下,提前备考大厂
- Kubernetes 也有局限性吗?
- 我是如何用6个月,从0编程经验变成数据科学家的?
- Hadoop精华问答 | NameNode是什么?
- OpenStack精华问答 | OpenStack是操作系统?
- pgsql数据库默认配置事务类型_postgreSql最佳配置详解(connection 申请、回收策略)...