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中使用Neo4j数据库的教程
Apr 16 Python
Python进程间通信用法实例
Jun 04 Python
Python实现批量将word转html并将html内容发布至网站的方法
Jul 14 Python
python opencv旋转图像(保持图像不被裁减)
Jul 26 Python
python 矢量数据转栅格数据代码实例
Sep 30 Python
详解python中*号的用法
Oct 21 Python
django实现类似触发器的功能
Nov 15 Python
python sorted方法和列表使用解析
Nov 18 Python
详细分析Python可变对象和不可变对象
Jul 09 Python
Python实现扫码工具的示例代码
Oct 09 Python
用Python实现童年贪吃蛇小游戏功能的实例代码
Dec 07 Python
Python 实现一个简单的web服务器
Jan 03 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
使用php+xslt在windows平台上
2006/10/09 PHP
php上的memcache和memcached两个pecl库
2010/03/29 PHP
PHP自定义函数收代码
2010/08/01 PHP
基于PHP代码实现中奖概率算法可用于刮刮卡、大转盘等抽奖算法
2015/12/20 PHP
Swoole实现异步投递task任务案例详解
2019/04/02 PHP
分享27款非常棒的jQuery 表单插件
2011/03/28 Javascript
让你的CSS像Jquery一样做筛选的实现方法
2011/07/10 Javascript
js中字符替换函数String.replace()使用技巧
2011/08/14 Javascript
Javascript中找到子元素在父元素内相对位置的代码
2012/07/21 Javascript
Jquery实现图片左右自动滚动示例
2013/09/25 Javascript
JavaScript实现将文本框的值插入指定位置的方法
2015/08/13 Javascript
javascript实现动态标签云
2015/10/16 Javascript
Bootstrap实现默认导航栏效果
2020/09/21 Javascript
论Bootstrap3和Foundation5网格系统的异同
2016/05/16 Javascript
通过bootstrap全面学习less
2016/11/09 Javascript
jquery replace方法去空格
2017/05/08 jQuery
vue中SPA单页面应用程序详解
2017/11/07 Javascript
Vue页面骨架屏的实现方法
2018/05/22 Javascript
vue 内联样式style中的background用法说明
2020/08/05 Javascript
Vue执行方法,方法获取data值,设置data值,方法传值操作
2020/08/05 Javascript
JavaScript实现京东快递单号查询
2020/11/30 Javascript
使用python3+xlrd解析Excel的实例
2018/05/04 Python
pyinstaller打包opencv和numpy程序运行错误解决
2019/08/16 Python
修改 CentOS 6.x 上默认Python的方法
2019/09/06 Python
基于Python和C++实现删除链表的节点
2020/07/06 Python
python 自定义异常和主动抛出异常(raise)的操作
2020/12/11 Python
css3 伪元素和伪类选择器详解
2014/09/04 HTML / CSS
Timberland澳大利亚官网:全球领先的户外品牌
2019/12/10 全球购物
大学英语演讲稿范文
2014/04/24 职场文书
中考标语大全
2014/06/05 职场文书
文秘应届生求职信
2014/07/05 职场文书
离婚协议书范文2014
2014/10/16 职场文书
个人年终总结结尾
2015/03/06 职场文书
乡镇法制宣传日活动总结
2015/05/05 职场文书
干部培训简讯
2015/07/20 职场文书
欢送领导祝酒词
2015/08/12 职场文书