前言
我们在使用爬虫的时候,如果请求次数过于频繁,经常会遇到IP被封的情况,导致本机IP在一定时间段内无法访问。
为了防止这种情况的发生,我们可以通过搭建个人代理池来避免。下面,我将通过一个Github开源项目来完成个人代理池的搭建。
Redis环境搭建
该项目是建立在Redis环境之上的,所以首先需要安装和配置Redis。Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。其项目地址为Releases · tporadowski/redis · GitHub下载其中的zip
并解压。可以通过打开解压目录下的redis.windows.conf
文件来对Redis进行相关配置,在Windows下常用的主要是配置密码:使用Ctrl+F搜索其中的requirepass
来进行连接密码的配置。
在使用前需要首先打开其中的redis-server.exe
.如果出现下图显示图片说明服务启动成功。
你可以通过解压目录下的redis-cli.exe
来进行连接。不过,在使用过程中不能关闭redis_server。这样十分麻烦,所以我们还需要对其进行自启动配置,使其一直运行在后台。在redis项目目录下打开cmd
窗口,键入下列代码来打开自启动服务。
redis-server --service-install redis.windows-service.conf --loglevel verbose
然后通过下列方式启动redis-server
redis-server --service-start
其他redis服务命令:
-
卸载服务:
redis-server --service-uninstall
-
停止服务:
redis-server --service-stop
至此,redis配置完成。
代理池搭建
首先从项目地址中下载项目并解压。然后建立一个python虚拟环境。可以通过Annaconda进行包管理。也可以直接所需要的包安装在当前环境下。本文主要采用conda来进行包管理。首先通过Ctrl+R
键入cmd
或者直接打开Annaconda Prompt
。
然后,创建虚拟环境:
conda create -n your_env_name python=x.x
其中,your_env_name为虚拟环境的名字,python=x.x为python的版本(该项目python版本应该大于等于3.6,如果不指明具体的版本号,则默认当前最高版本)
然后打开解压文件夹,我使用的是VS Code,切换到刚才建立的虚拟环境下,通过
pip insyall -r requirements.txt
安装所依赖的包。
打开项目下的run.py
运行即可,如果之前给redis设置了密码,还需要打开项目下的setting.py
并找到
REDIS_PASSWORD = env.str('REDIS_PASSWORD', None)
将其中的None
改为你设置的密码,再通过run.py
来运行。
最后,可以在浏览器中输入
http://localhost:5555/random
检查是否可任意获取到代理IP。
至此,个人代理池搭建完毕。在爬虫代码中使用下列模板即可完成使用。
url = 'YOUR_URL'
proxy_url = 'http://localhost:5555/random' # 代理池请求网址
headers = {
'User-Agent': 'Chrome/10'
}
de get_proxy():
try:
resp = requests.get(proxy_url)
if resp.status_code == 200:
# print(resp.text)
return resp.text
return None
except ConnectionError:
return None
def get_html():
proxy = get_proxy()
proxies = {
'http': 'http://' + proxy
}
response = requests.post(url, headers=headers, proxies=proxies)
if response.status_code == 200:
return response
else:
return get_html()
评论区