点赞再看,养成习惯,您动动手指对原创作者意义非凡🤝 备战2021秋招面试 微信搜索公众号【TechGuide】关注更多新鲜好文和互联网大厂的笔经面经。 作者@TechGuide
前言这篇是关于搭建网络爬虫用的代理IP池的,付费且稳定可靠的代理有很多,可以直接购买,基本价格在每月百元左右。但是,获得有效且免费的代理IP还有一个方法,那就是代理IP池了,本文会将构建的过程详细说一遍,跟着一步步走肯定不会出错。话不多说,进入正题。
代理ip池源码第一步,将Germey的这个github的proxypool源码下载或者git到本地,如果是下载的压缩包,请解压到你的工作目录。如果想要对代理IP池的原理有更多的了解,可以看这里。
一、环境配置 安装配置redis库首先需要安装并配置redis数据库,用于存储我们收集的用户IP。方法很简单,十分钟足够,可以参考我的这篇文章python3网络爬虫系列(一)Redis库安装原来只需这样简单三步。
安装anaconda推荐用conda创建虚拟环境,可以参考这篇文章, 如果你已经安装配置好了需要的环境,可以忽略以上,直接运行程序。
二、运行IP池安装好以后,切换到文件requirements.txt所在的目录,并用下面的命令安装依赖包
pip3 install -r requirements.txt
或者
pip install -r requirements.txt
之后,就可以直接调用API,运行代理池了,但注意,一定要确保redis server是在运行当中的,并且配置好了环境变量。具体操作是切换到run.py所在目录并执行命令:
python run.py
或者
python3 run.py
这时候会得到如下界面,显示了正从某一代理网站抓取的可用IP,它会自行检验IP的可用性,质量有一定保证,用来自己做爬虫项目采集数据还是绰绰有余的。 这个过程中碰到的99%的问题都是因为anaconda库或者anaconda-navigator没有版本更新,可以用以下命令:
conda update anaconda
conda update anaconda-navigator
conda update conda
或者
conda update --all
至此,你的IP池就构建好了!
三、使用IP池
构建好之后,可以先测试一下自己是否能从redis库中取到检验过的IP,用浏览器打开 http://localhost:5555/random 就可以获得一个文本形式的IP字符串了,也是我们的调用函数返回值,具体用例可以参考下面的这段程序。
PROXY_POOL_URL = 'http://localhost:5555/random'
def get_proxy():
try:
response = requests.get(PROXY_POOL_URL)
if response.status_code == 200:
ip = response.text
#设置代理,格式如下
proxy_ip = "http://" + ip
proxy_ips = "https://" + ip
proxy = {"https":proxy_ips,"http":proxy_ip}
return proxy
except ConnectionError:
return None
我在这里是那它作为代理来抓取网页的,那么可以这样使用返回的poxy文本,比如:
try:
session = requests.session()
resp=session.get(url,headers=headers,proxies=proxies,cookies=cookies,timeout=3)
if resp.status_code == requests.codes.ok:
print("---------------------------\n")
print(resp.text[10000:30000])
print("---------------------------\n")
success+=1
print("【访问成功{}】".format(success)+proxies["https"])
time.sleep(40)
except Exception as e:
#无响应则print出该代理ip
fail+=1
print ('【访问失败{}/】'.format(fail)+proxies["https"])
除此以外,我还陆续更新了其他相关的学习笔记。如果看到这里的话,说明你有认真看这篇文章,希望你能有所收获!最后,欢迎交流指正! python3网络爬虫系列(一)Redis库安装原来只需这样简单三步 python3网络爬虫系列(二)用这一招!我终于有了免费好用的代理IP池 python3网络爬虫系列(三)爬取给定URL网页(访问量、阅读量)实例