python3网络爬虫系列(二)用这一招!我终于有了免费好用的代理IP池

当你的才华还撑不起你的野心时,你应该静下心去学习 。

前言

这篇是关于搭建网络爬虫用的代理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网页(访问量、阅读量)实例

发布了10 篇原创文章 · 获赞 23 · 访问量 6582

猜你喜欢

转载自blog.csdn.net/weixin_41896265/article/details/105463957