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之编写类之一创建实例
Oct 11 Python
Python和perl实现批量对目录下电子书文件重命名的代码分享
Nov 21 Python
利用Python获取操作系统信息实例
Sep 02 Python
Python文本相似性计算之编辑距离详解
Nov 28 Python
基于Python的关键字监控及告警
Jul 06 Python
Python之Scrapy爬虫框架安装及使用详解
Nov 16 Python
windows下安装Python的XlsxWriter模块方法
May 03 Python
python3基于TCP实现CS架构文件传输
Jul 28 Python
Django学习之文件上传与下载
Oct 06 Python
使用Python文件读写,自定义分隔符(custom delimiter)
Jul 05 Python
PIP和conda 更换国内安装源的方法步骤
Sep 21 Python
详解如何使用Pytest进行自动化测试
Jan 14 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中如何判断AJAX提交的数据
2012/02/05 PHP
ThinkPHP框架里隐藏index.php
2016/04/12 PHP
linux下php上传文件注意事项
2016/06/11 PHP
php封装一个异常的处理类
2017/06/08 PHP
PHP二维关联数组的遍历方式(实例讲解)
2017/10/18 PHP
gearman管理工具GearmanManager的安装与php使用方法示例
2020/02/27 PHP
超级兔子让浮动层消失的前因后果
2007/03/09 Javascript
javascript复制对象使用说明
2011/06/28 Javascript
通过JS自动隐藏手机浏览器的地址栏实现原理与代码
2013/01/02 Javascript
JavaScript创建对象的写法
2013/08/29 Javascript
两种方法基于jQuery实现IE浏览器兼容placeholder效果
2014/10/14 Javascript
js动态修改表格行colspan列跨度的方法
2015/03/30 Javascript
jQuery实现鼠标经过提示信息的地图热点效果
2015/04/26 Javascript
详解AngularJS中自定义指令的使用
2015/06/17 Javascript
AngularJS中$interval的用法详解
2016/02/02 Javascript
前端常见跨域解决方案(全)
2017/09/19 Javascript
JS实现多物体运动的方法详解
2018/01/23 Javascript
JS中验证整数和小数的正则表达式
2018/10/08 Javascript
如何在vue中使用jointjs过程解析
2020/05/29 Javascript
[56:46]2018DOTA2亚洲邀请赛 3.31 小组赛 B组 VP vs Effect
2018/04/01 DOTA
在Django的上下文中设置变量的方法
2015/07/20 Python
Saltstack快速入门简单汇总
2016/03/01 Python
使用pycharm生成代码模板的实例
2018/05/23 Python
pytorch + visdom 处理简单分类问题的示例
2018/06/04 Python
python调用外部程序的实操步骤
2019/03/04 Python
python几种常用功能实现代码实例
2019/12/25 Python
HTML5实现直播间评论滚动效果的代码
2020/05/27 HTML / CSS
Ajax的工作原理
2015/12/04 面试题
公司营业员的工作总结自我评价
2013/10/05 职场文书
网络专业学生个人的自我评价
2013/12/16 职场文书
应用化学专业职业生涯规划书
2013/12/31 职场文书
珍珠鸟教学反思
2014/02/01 职场文书
大学自主招生自荐信范文
2014/02/26 职场文书
反邪教警示教育方案
2014/05/13 职场文书
城市创卫标语
2014/06/17 职场文书
工程索赔意向书
2014/08/30 职场文书