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 相关文章推荐
c++生成dll使用python调用dll的方法
Jan 20 Python
python解决Fedora解压zip时中文乱码的方法
Sep 18 Python
Python爬虫框架Scrapy常用命令总结
Jul 26 Python
Python实现多属性排序的方法
Dec 05 Python
django写用户登录判定并跳转制定页面的实例
Aug 21 Python
python如何保证输入键入数字的方法
Aug 23 Python
Python 实现大整数乘法算法的示例代码
Sep 17 Python
利用Python脚本实现自动刷网课
Feb 03 Python
python字符串判断密码强弱
Mar 18 Python
Python3之外部文件调用Django程序操作model等文件实现方式
Apr 07 Python
Python接口自动化测试的实现
Aug 28 Python
【超详细】八大排序算法的各项比较以及各自特点
Mar 31 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开发框架的对比
2013/07/05 PHP
php下载远程大文件(获取远程文件大小)的实例
2017/06/17 PHP
详解laravel安装使用Passport(Api认证)
2018/07/27 PHP
PHP校验15位和18位身份证号的类封装
2018/11/07 PHP
PHP hex2bin()函数用法讲解
2019/02/25 PHP
php 使用expat方式解析xml文件操作示例
2019/11/26 PHP
新鲜出炉的js tips提示效果
2011/04/03 Javascript
Firefox中beforeunload事件的实现缺陷浅析
2012/05/03 Javascript
Jquery实现图片放大镜效果的思路及代码(自写)
2013/10/18 Javascript
JS设置网页图片vspace和hspace属性的方法
2015/04/01 Javascript
JS提交form表单实例分析
2015/12/10 Javascript
javascript自定义滚动条实现代码
2020/04/20 Javascript
jQuery解决$符号命名冲突
2016/06/18 Javascript
Bootstrap标签页(Tab)插件切换echarts不显示问题的解决
2018/07/13 Javascript
JS实现商品橱窗特效
2020/01/09 Javascript
vue数据响应式原理知识点总结
2020/02/16 Javascript
Python中的命令行参数解析工具之docopt详解
2017/03/27 Python
Python数据结构之栈、队列的实现代码分享
2017/12/04 Python
pyqt5的QWebEngineView 使用模板的方法
2018/08/18 Python
Python实现常见的回文字符串算法
2018/11/14 Python
python3编写ThinkPHP命令执行Getshell的方法
2019/02/26 Python
Python常见读写文件操作实例总结【文本、json、csv、pdf等】
2019/04/15 Python
pyqt实现.ui文件批量转换为对应.py文件脚本
2019/06/19 Python
python爬虫 批量下载zabbix文档代码实例
2019/08/21 Python
Python实现疫情通定时自动填写功能(附代码)
2020/05/27 Python
德国低价购买灯具和家具网站:Style-home.de
2016/11/25 全球购物
工商管理本科毕业生求职信范文
2013/10/05 职场文书
关于打架的检讨书
2014/01/17 职场文书
法人任命书范本
2014/06/04 职场文书
社区矫正工作方案
2014/06/04 职场文书
群众路线自我剖析范文
2014/11/04 职场文书
2015年精神文明建设工作总结
2015/04/21 职场文书
新郎新娘致辞
2015/07/31 职场文书
2016学雷锋优秀志愿者事迹材料
2016/02/25 职场文书
关于EntityWrapper的in用法
2022/03/22 Java/Android
MySQL 原理与优化之Limit 查询优化
2022/08/14 MySQL