您当前的位置: 首页 >  网络

TechGuide

暂无认证

  • 5浏览

    0关注

    176博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

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

TechGuide 发布时间:2020-04-12 07:02:20 ,浏览量:5

点赞再看,养成习惯,您动动手指对原创作者意义非凡🤝 备战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网页(访问量、阅读量)实例

关注
打赏
1665329535
查看更多评论
立即登录/注册

微信扫码登录

0.1455s