爬虫 | 用python构建自己的IP代理池,再也不担心IP不够用啦!


大家好,我是欧K。
如果你写过爬虫或者了解过爬虫,你一定深有体会,为什么爬着爬着就趴了…在目前这个大数据时代,许多网站尤其是数据网站采取了各种各样的措施来反爬虫,越是数据价值高的网站反爬做的越复杂,那么究竟怎样才能越过种种屏障,获取我们想要的数据呢,本期将教大家如何爬取大量免费高匿代理IP。

一、准备工作

常见网站反爬方式主要有以下几种:

  • 请求头
  • IP限制
  • 验证码
  • 动态加载
  • 数据加密

其实请求头、验证码、动态加载以及数据加密反扒都是在你可以访问网站或者服务器之后的反爬措施,这些都可以使用一些解析方法来破解。

那么试想一下,如果网站直接限制了你的IP,导致根本无法获取想要的数据,即使会N种数据破解方式又有何用呢?所以你懂得。。。

什么是代理IP

代理IP按匿名度可分为三种:

  • 透明代理:使用透明代理去访问目标服务器,对方服务器会知道你正在使用代理,并且能识别你本地真实ip地址。
  • 匿名代理:使用匿名代理去访问目标服务器,对方服务器会知道你正在使用代理,但是无法识别你的真实IP。
  • 高匿名代理:使用高匿名代理目标服务器不仅无法识别你的真实ip,还无法识别你使用了代理。
    高匿名代理可以很好的隐藏本地ip,使用伪装的ip去访问目标网站。

二、网页分析

以西拉代理为例:http://www.xiladaili.com/http/

在这里插入图片描述

我们可以看到一共有2000页的免费代理IP,足够使用了!不过需要注意代理IP是有存活时间的,从几分钟到几天几个月不等,自行根据需要过滤即可。

这里我们爬取前50页的数据就可以了,当然爬100页,2000页都是可以的。

简单分析一下网页,F12检查网页源码:

在这里插入图片描述

所有IP信息都在tbody标签中,每一行为一个tr标签。

三、代理IP处理

3.1 配置环境(包)

'''
爬取国内高匿代理IP
author: Python当打之年
'''
import random
import time
import requests
from bs4 import BeautifulSoup
from fake_useragent import UserAgent

如未安装模块,请使用pip instatll 安装即可

3.2 获取高匿IP信息

def get_ipinfo(url, headers):
    ipinfo = []
    # 爬取前50页代理
    for i in range(1, 50):
        try:
            url0 = url.format(i)
            # 随机延时,避免请求频率过快导致网络瘫痪
            time.sleep(random.uniform(3.1, 4.2))
            # 发送网页请求
            html = requests.get(url0, headers=headers, timeout=10)
            soup = BeautifulSoup(html.text, 'lxml')
            # 分析IP列表
            tr_list = soup.select_one('.fl-table').select_one('tbody').select('tr')
            # 遍历每一行,获取IP
            for td_list in tr_list:
                # 过滤,仅获取高匿、有效期超过1天的IP
                if '高匿' in td_list.select('td')[2].text and '天' in td_list.select('td')[5].text:
                    ipport = td_list.select('td')[0].text
                    ipinfo.append(ipport)
        except:
            continue
        # 返回满足要求IP
        return ipinfo

3.3 验证IP是否有效

既然IP有实效,那么爬取到的IP就可能是失效的IP或者是包装过的IP,这些IP并不能使用,接下来我们需要先检测一下IP是否能正常使用,然后仅保留有效IP,构建IP代理池。

以下几个网站,可以很方便的检验IP是否有效:

  • icanhazip.com/ 返回IP地址
  • ip.chinaz.com/ 可以查询IP地址和位置信息
  • www.ip.cn/ 可以查询IP地址和位置信息

这里使用站长工具(ip.chinaz.com)检测

def check_ip(ippost_info, headers):
    # http://icanhazip.com IP测试网址
    check_url = 'http://icanhazip.com'
    proxies = {'http': 'http://' + ippost_info, 'https': 'https://' + ippost_info}
    try:
        time.sleep(1)
        # 发送测试请求
        r = requests.get(check_url, headers=headers, proxies=proxies, timeout=10)
        if r.status_code == 200:
            print('有效IP:' + ippost_info)
            with open('xila_https_list.txt', 'a') as f:
                f.write(ippost_info)
                f.write('\n')
        else:
            print('无效IP:' + ippost_info)
    except:
        print('无效IP:' + ippost_info)

至此,前50页有效IP我们就全部拿到了,作为演示,我把有效IP保存在了xila_https_list.txt文件中,大家也可以存储到MongoDB或者MySQL数据库中。

写在最后

小爬怡情,大爬伤身,强爬。。。(自行脑补)


以上就是本期为大家整理的全部内容了,赶快练习起来吧,原创不易,喜欢的朋友可以点赞、收藏也可以分享让更多人知道哦

往期推荐

爬虫 | Python送你王者荣耀官网全套皮肤
基础 | Python函数一文详解
可视化 | Python制作最炫3D可视化地图
可视化 | 动起来的中国大学排名,看看你的母校在哪里
技巧 | Python 字典用法详解(超全)
技巧 | 20个Pycharm最实用最高效的快捷键(动态展示)
技巧 | 5000字超全解析Python三种格式化输出方式【% / format / f-string】

微信公众号 “Python当打之年” ,每天都有python编程技巧推送,希望大家可以喜欢在这里插入图片描述

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Python当打之年

您的鼓励是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值