Python爬虫-IP隐藏与代理爬取

前言

在渗透测试或者爬虫运行过程中,目标服务器会记录下我们的IP,甚至会封锁我们的IP,所以我们需要隐藏自己的IP。这时就需要用到代理服务器,我们将自己的请求交给代理服务器,由代理服务器将我们的请求交给目标服务器,目标服务器只会记录下代理服务器的IP地址。
在这里插入图片描述从IP代理的隐蔽性级别进行划分,代理可以分为三种,即高度匿名代理、普通匿名代理和透明代理。

代理类型代理服务器端的配置描述
透明代理REMOTE_ADDR = Proxy IP;HTTP_VIA = Proxy IP;HTTP_X_FORWARDED_FOR = Your IP透明代理虽然可以直接“隐藏”你的IP地址,但是还是可以从HTTP_X_FORWARDED_FOR来查到你是谁。
匿名代理REMOTE_ADDR = proxy IP;HTTP_VIA = proxy IP;HTTP_X_FORWARDED_FOR = proxy IP匿名代理比透明代理进步了一点:别人只能知道你用了代理,无法知道你是谁。
高匿代理REMOTE_ADDR = Proxy IP;HTTP_VIA = Proxy IP;HTTP_X_FORWARDED_FOR = Random IP address高匿代理让别人根本无法发现你是在用代理,所以是最好的选择。

本文将讲述如何使用免费代理IP进行IP隐藏、如何配置代理IP、如何爬取代理IP等。

IP 隐藏

先来看一个获取免费代理IP的网站:
在这里插入图片描述其他提供免费代理 IP 的网站:

https://seofangfa.com/proxy/;
https://ip.jiangxianli.com/;
https://www.kuaidaili.com/free/inha/;
https://ip.ihuan.me/;
https://www.89ip.cn/index.html

Proxifier

有了免费代理的来源,下面使用 Proxifier 代理工具在 Windows 主机上进行代理 IP 的配置。

Proxifier 代理工具下载地址:http://www.proxifier.com/。

1、首先选取快代理上一个响应速度较快的代理:
在这里插入图片描述
2、运行 Proxifier ,点击 “Profile-Proxy Servers” 进行配置:

在这里插入图片描述

3、点击 check 检查代理是否正常,结果不能用……免费的就这质量了……:

在这里插入图片描述
4、硬着头皮多试几个,找到可用的代理:
在这里插入图片描述
在这里插入图片描述

免费代理

以上已经找到免费的公用代理,下面进行配置核验。

1、设置让火狐浏览器走系统代理IP,PC其他程序的不走代理(代理规则配置时,勾选桌面火狐浏览器快捷方式即可指定 firefox.exe程序):

在这里插入图片描述
2、设置完毕,先打开谷歌浏览器查看本机IP,为我的真实IP地址(广州):

在这里插入图片描述
3、最后使用火狐浏览器查看本机 IP,为江西省宜春市的代理 IP 地址:

在这里插入图片描述

至此,已成功获取到免费的代理IP并进行本机IP地址的隐藏。

自动爬取

以上手动获取免费代理IP的过程太难受了……一个个手工测试,半天才能捞到一个有效的代理IP。忍不了,上Python爬虫脚本进行自动化识别爬取。

此处选择的是89免费代理IP网站:https://www.89ip.cn/ 进行爬取,并且每一个IP都进行有效性测试(测试访问百度),并最终输出有效的IP地址。
在这里插入图片描述
直接上完整爬虫代码,已做代码备注,不一一分析:

# -*- coding: utf-8 -*-
# Project : 爬取代理IP并且测试可用IP
# Tool : PyCharm

import requests
from bs4 import BeautifulSoup

header = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36'
}


# 提取网页源码
def getHtml(url):
    try:
        reponse = requests.get(url, headers=header)
        reponse.raise_for_status()
        reponse.encoding = reponse.apparent_encoding
        return reponse.text
    except:
        return "网页源码提取错误"


# 解析网页,提取IP
def getIp(html, list):
    try:
        soup = BeautifulSoup(html, "html.parser")
        tr = soup.find("tbody").find_all_next("tr")
        for ip in tr:
            # 提取IP
            td = ip.find_next("td").string
            td = str(td).replace(" ", "").replace("\n", "").replace("\t", "")
            # 提取端口号
            dk = ip.find_all_next("td")[1].string
            dk = str(dk).replace(" ", "").replace("\n", "").replace("\t", "")
            # 将IP和端口号进行连接
            ip = td + ":" + dk
            list.append(ip)  # 再进IP地址存放至指定列表中去
    except:
        print("获取IP失败")


# 测试出可用IP
def ip_text(list, valid_IP):
    try:
        url = "https://www.baidu.com//"
        for ip in list:
            try:
                rep = requests.get(url, proxies={'https': ip}, headers=header, timeout=0.5)
                if rep.status_code == 200:  # 如果放回的状态码是200,那么说明该IP地址可用
                    valid_IP.append(ip)
                    print("该代理IP有效:" + ip)
                else:
                    print("该代理IP无效:" + ip)
            except:
                print("该代理IP无效:" + ip)
    except:
        print("IP测试失败")


if __name__ == '__main__':

    valid_IP = []  # 有效IP地址
    for i in range(1, 90):  # 可自定义页数
        ip_list = []  # 存放所有爬取到的ip
        url = "https://www.89ip.cn/index_" + str(i) + ".html"
        print(url)
        html = getHtml(url)
        getIp(html, ip_list)
        ip_text(ip_list, valid_IP)

    print("=" * 30)
    print("测试完成,有效IP如下:")
    print("-" * 30)
    for a in valid_IP:
        print(a)
    print("=" * 30)

来看下运行效果:
在这里插入图片描述
然鹅……做好心理准备,爬取下来的IP,可能立马就失效了,毕竟免费的……

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 黑客帝国 设计师:白松林 返回首页
实付 99.90元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值