自己新建代理池拼采用python调用访问网页
项目地址https://github.com/lvwuwei/AutoBuy/tree/master/ProxyPool
采用googleshell安装注意1,无法使用外网端口访问
安装pip3 install -r requirements.txt 其中 版本lxml有冲突,采用pip3 uninstall lxml然后再安装指定版本pip3 install lxml==4.6.4 或者3.5
安装好用需要安装apt-get install redis服务器 然后运行服务器redis-server
可以看到 Redis、Getter、Server、Tester 都已经启动成功。
然后再开一个terminal再运行sudo python3 run.py 或者转换超级用户su然后root用户下在python3 run.py
注意使用screen -S proxy创建后台执行任务!
这时候访问 http://localhost:5555/random 即可获取一个随机可用代理。
使用
爬取数据包在/AutoBuy/ProxyPool/proxypool/crawlers/public/
http://www.66ip.cn/{page}.html
成功运行之后可以通过 http://localhost:5555/random 获取一个随机可用代理。
可以用程序对接实现,下面的示例展示了获取代理并爬取网页的过程:
import requestsproxypool_url = 'http://127.0.0.1:5555/random'target_url = 'http://httpbin.org/get'def get_random_proxy(): """ get random proxy from proxypool :return: proxy """ return requests.get(proxypool_url).text.strip()def crawl(url, proxy): """ use proxy to crawl page :param url: page url :param proxy: proxy, such as 8.8.8.8:8888 :return: html """ proxies = {'http': 'http://' + proxy} return requests.get(url, proxies=proxies).textdef main(): """ main method, entry point :return: none """ proxy = get_random_proxy() print('get random proxy', proxy) html = crawl(target_url, proxy) print(html)if __name__ == '__main__': main()
运行结果如下:
get random proxy 116.196.115.209:8080
{ "args": {}, "headers": { "Accept": "*/*", "Accept-Encoding": "gzip, deflate", "Host": "httpbin.org", "User-Agent": "python-requests/2.22.0", "X-Amzn-Trace-Id": "Root=1-5e4d7140-662d9053c0a2e513c7278364" }, "origin": "116.196.115.209", "url": "https://httpbin.org/get"
}
可以看到成功获取了代理,并请求 httpbin.org 验证了代理的可用性。
可配置项
代理池可以通过设置环境变量来配置一些参数。
开关
- ENABLE_TESTER:允许 Tester 启动,默认 true
- ENABLE_GETTER:允许 Getter 启动,默认 true
- ENABLE_SERVER:运行 Server 启动,默认 true
环境
- APP_ENV:运行环境,可以设置 dev、test、prod,即开发、测试、生产环境,默认 dev
- APP_DEBUG:调试模式,可以设置 true 或 false,默认 true
Redis 连接
- REDIS_HOST:Redis 的 Host
- REDIS_PORT:Redis 的端口
- REDIS_PASSWORD:Redis 的密码
- REDIS_DB:Redis 的数据库索引,如 0、1
- REDIS_CONNECTION_STRING:Redis 连接字符串
- REDIS_KEY:Redis 储存代理使用字典的名称
处理器
- CYCLE_TESTER:Tester 运行周期,即间隔多久运行一次测试,默认 20 秒
- CYCLE_GETTER:Getter 运行周期,即间隔多久运行一次代理获取,默认 100 秒
- TEST_URL:测试 URL,默认百度
- TEST_TIMEOUT:测试超时时间,默认 10 秒
- TEST_BATCH:批量测试数量,默认 20 个代理
- TEST_VALID_STATUS:测试有效的状态吗
- API_HOST:代理 Server 运行 Host,默认 0.0.0.0
- API_PORT:代理 Server 运行端口,默认 5555
- API_THREADED:代理 Server 是否使用多线程,默认 true
日志
- LOG_DIR:日志相对路径
- LOG_RUNTIME_FILE:运行日志文件名称
- LOG_ERROR_FILE:错误日志文件名称
以上内容均可使用环境变量配置,即在运行前设置对应环境变量值即可,如更改测试地址和 Redis 键名:
export TEST_URL=http://weibo.cnexport REDIS_KEY=proxies:weibo
即可构建一个专属于微博的代理池,有效的代理都是可以爬取微博的。
安装redis错误 再ubuntu20中 安装 apt-get install redis 然后启动redis-server 发现错误 就是没错误
查看版本redis-server -V