python爬虫利用代理池更换IP的方法步骤


Posted in Python onFebruary 21, 2021

0. 前言

周日在爬一个国外网站的时候,发现用协程并发请求,并且请求次数太快的时候,会出现对方把我的服务器IP封掉的情况。于是网上找了一下开源的python代理池,这里选择的是star数比较多的proxy_pool

1. 安装环境

# 安装python虚拟环境, python环境最好为python3.6,再往上的话,安装依赖时会报错
sudo apt update
sudo apt install python3.6
pip3 install virtualenv
virtualenv venv --python=python3.6
source venv/bin/activate

# 安装redis
sudo apt install redis-server
# 启动redis server
redis-server

 2. 安装依赖

git clone https://github.com/jhao104/proxy_pool.git
cd proxy_pool
pip install -r requirements.txt

3. 修改配置文件

# 修改setting.py 

# 配置API服务

HOST = "0.0.0.0"    # IP
PORT = 5010     # 监听端口

# 配置数据库

# 以下为三个示例,根据redis的配置,选择其中一种即可
# 一般启动redis时如果没有配置文件,那么选择第一种即可
# 1. Redis IP: 127.0.0.1 Port: 6379
DB_CONN = 'redis://@127.0.0.1:6379'
# 2. Redis IP: 127.0.0.1 Port: 6379 Password: 123456
DB_CONN = 'redis://:123456@127.0.0.1:6379'
# 3. Redis IP: 127.0.0.1 Port: 6379 Password: 123456 DB: 15
DB_CONN = 'redis://:123456@127.0.0.1:6379/15'

 

# 配置 ProxyFetcher

PROXY_FETCHER = [
 "freeProxy01",  # 这里是启用的代理抓取方法名,所有fetch方法位于fetcher/proxyFetcher.py
 "freeProxy02",
 # ....
]

4. 启动

# 可以用tmux开三个窗口

# 启动调度程序
python proxyPool.py schedule

# 启动webApi服务
python proxyPool.py server

5. 测试

import requests

def get_proxy():
 return requests.get("http://127.0.0.1:5010/get/").json()

def delete_proxy(proxy):
 requests.get("http://127.0.0.1:5010/delete/?proxy={}".format(proxy))

# your spider code

def getHtml():
 # ....
 retry_count = 5
 proxy = get_proxy().get("proxy")
 while retry_count > 0:
  try:
   html = requests.get('http://www.example.com', proxies={"http": "http://{}".format(proxy)})
   # 使用代理访问
   return html
  except Exception:
   retry_count -= 1
 # 删除代理池中代理
 delete_proxy(proxy)
 return None

python爬虫利用代理池更换IP的方法步骤

更多的用法和文档请参考:document 和 https://github.com/jhao104/proxy_pool

到此这篇关于python爬虫利用代理池更换IP的方法步骤的文章就介绍到这了,更多相关python 代理池更换IP内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python实现封装得到virustotal扫描结果
Oct 05 Python
用Django实现一个可运行的区块链应用
Mar 08 Python
关于Python的一些学习总结
May 25 Python
Python面向对象类继承和组合实例分析
May 28 Python
python指定写入文件时的编码格式方法
Jun 07 Python
python两个_多个字典合并相加的实例代码
Dec 26 Python
解决在keras中使用model.save()函数保存模型失败的问题
May 21 Python
python实现学生成绩测评系统
Jun 22 Python
详解Pytorch显存动态分配规律探索
Nov 17 Python
深度学习详解之初试机器学习
Apr 14 Python
如何使用flask将模型部署为服务
May 13 Python
Python实现简单的猜单词
Jun 15 Python
Python用requests库爬取返回为空的解决办法
Feb 21 #Python
python利用proxybroker构建爬虫免费IP代理池的实现
Feb 21 #Python
python实现图片转字符画的完整代码
Feb 21 #Python
利用Python实现最小二乘法与梯度下降算法
Feb 21 #Python
Scrapy实现模拟登录的示例代码
Feb 21 #Python
scrapy-splash简单使用详解
Feb 21 #Python
详解使用scrapy进行模拟登陆三种方式
Feb 21 #Python
You might like
《魔兽世界》惊魂幻象将获得调整
2020/03/08 其他游戏
怎样在PHP中通过ADO调用Asscess数据库和COM程序
2006/10/09 PHP
php中3种方法删除字符串中间的空格
2014/03/10 PHP
php的4种常见运行方式
2015/03/20 PHP
ThinkPHP实现递归无级分类――代码少
2015/07/29 PHP
PHP实现的链式队列结构示例
2017/09/15 PHP
PHP token验证生成原理实例分析
2019/06/05 PHP
CSDN轮换广告图片轮换效果
2007/03/27 Javascript
来自chinaz的ajax获取评论代码
2008/05/03 Javascript
Wordpress ThickBox 添加“查看原图”效果代码
2010/12/11 Javascript
js判断字符长度及中英文数字等
2014/03/19 Javascript
详解angular中如何监控dom渲染完毕
2017/01/03 Javascript
jQuery插件DataTables分页开发心得体会
2017/08/22 jQuery
vue2+el-menu实现路由跳转及当前项的设置方法实例
2017/11/07 Javascript
vue动态路由配置及路由传参的方式
2018/05/23 Javascript
浅谈微信JS-SDK 微信分享接口开发(介绍版)
2018/08/15 Javascript
小程序实现多选框功能
2018/10/30 Javascript
js 函数性能比较方法
2020/08/24 Javascript
Vue 3自定义指令开发的相关总结
2021/01/29 Vue.js
详解Python的单元测试
2015/04/28 Python
Python 给某个文件名添加时间戳的方法
2018/10/16 Python
python SQLAlchemy的Mapping与Declarative详解
2019/07/04 Python
numpy.meshgrid()理解(小结)
2019/08/01 Python
python3读取autocad图形文件.py实例
2020/06/05 Python
CSS3实现彩色进度条动画的示例
2020/10/29 HTML / CSS
The Hut德国站点:时装、家居用品、美容等
2016/09/23 全球购物
KEETSA环保床垫:更好的睡眠,更好的生活!
2016/11/24 全球购物
Waterford英国官方网站:世界上最受欢迎的优质水晶品牌
2019/08/17 全球购物
自我评价优秀范文分享
2013/11/30 职场文书
四年大学生活的个人自我评价
2013/12/11 职场文书
工作态度检讨书
2014/02/11 职场文书
大家访活动实施方案
2014/03/10 职场文书
2014医学院领导干部四风对照检查材料思想汇报
2014/09/16 职场文书
2016年优秀党务工作者先进事迹材料
2016/02/29 职场文书
一篇文章带你学习Mybatis-Plus(新手入门)
2021/08/02 Java/Android
python使用opencv对图像添加噪声(高斯/椒盐/泊松/斑点)
2022/04/06 Python