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调用浏览器并打开一个网址的例子
Jun 05 Python
Python检测生僻字的实现方法
Oct 23 Python
Python单例模式的两种实现方法
Aug 14 Python
windows下python之mysqldb模块安装方法
Sep 07 Python
TensorFlow变量管理详解
Mar 10 Python
python2.7实现FTP文件下载功能
Apr 15 Python
详解opencv Python特征检测及K-最近邻匹配
Jan 21 Python
django迁移数据库错误问题解决
Jul 29 Python
python将字符串转变成dict格式的实现
Nov 18 Python
Pytorch自己加载单通道图片用作数据集训练的实例
Jan 18 Python
python 读取二进制 显示图片案例
Apr 24 Python
Python+Appium自动化测试的实战
Jun 30 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 Smarty生成EXCEL文档的代码
2008/08/23 PHP
PHP编实现程动态图像的创建代码
2008/09/28 PHP
PHP遍历文件夹与文件类及处理类用法实例
2014/09/23 PHP
使用PHP如何实现高效安全的ftp服务器(一)
2015/12/20 PHP
php实现微信发红包功能
2018/07/13 PHP
JQuery 学习笔记 选择器之二
2009/07/23 Javascript
JavaScript中使用replace结合正则实现replaceAll的效果
2010/06/04 Javascript
js实现一个省市区三级联动选择框代码分享
2013/03/06 Javascript
浅析jQuery中常用的元素查找方法总结
2013/07/04 Javascript
设置jsf的选择框h:selectOneMenu为不可编辑状态的方法
2014/01/07 Javascript
JS+CSS实现感应鼠标渐变显示DIV层的方法
2015/02/20 Javascript
bootstrap网格系统使用方法解析
2017/01/13 Javascript
JS实现可视化文件上传
2018/09/08 Javascript
vue实现简单瀑布流布局
2020/05/28 Javascript
[50:17]Newbee vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
python 文件和路径操作函数小结
2009/11/23 Python
python使用urllib2提交http post请求的方法
2015/05/26 Python
Python数据分析之双色球基于线性回归算法预测下期中奖结果示例
2018/02/08 Python
纯python实现机器学习之kNN算法示例
2018/03/01 Python
python绘制直线的方法
2018/06/30 Python
python设定并获取socket超时时间的方法
2019/01/12 Python
python3+selenium实现126邮箱登陆并发送邮件功能
2019/01/23 Python
Python实现点阵字体读取与转换的方法
2019/01/29 Python
wxpython绘制音频效果
2019/11/18 Python
CSS3新增布局之: flex详解
2020/06/18 HTML / CSS
世界上最大的家庭自动化公司:Smarthome
2017/12/20 全球购物
DOUGLAS荷兰:购买香水和化妆品
2020/10/24 全球购物
2014小学植树节活动总结
2014/03/10 职场文书
公司承诺书格式
2014/05/21 职场文书
公司法定代表人授权委托书
2014/09/29 职场文书
2014财务部年度工作总结
2014/12/08 职场文书
写给医院的感谢信
2015/01/22 职场文书
热爱劳动主题班会
2015/08/14 职场文书
2016党性教育学习心得体会
2016/01/21 职场文书
golang 语言中错误处理机制
2021/08/30 Golang
服务器间如何实现文件共享
2022/05/20 Servers