威胁情报之情报采集_隐藏自己

基本使用

代理小知识

【高匿】:代表服务器追踪不到你原来的IP;

【透明】:代表服务器可以追踪到你的代理IP和原来的IP;

【普通匿名】:隐藏客户机真实IP,会改变我们的请求信息,服务器会认为我们使用代理

类型表示支持的类型:HTTP或者HTTPS

【存活的时间】:表示在这个期间可用

很多网站会检测某一段时间某个IP的访问次数(通过流量统计,系统日志等),如果访问的次数多得不像正常人,它会禁止这个IP的访问。

所以我们可以设置一些代理服务器,每个一段时间换一个代理,就算IP被禁止,依然可以换个IP继续爬取。

1.代理的原理:在请求目的网站之前,先请求代理服务器,然后让代理服务器去请求目的网站,代理服务器拿到目的网站的数据后,再转发给我们的代码。

2.请求:http://httpbin.org 这个网站可以方便的查看HTTP请求的一些参数。

3.urllib中通过ProxyHandler来设置使用代理服务器,下面代码说明如何使用自定义opener来使用代理:

  • 使用urllib.request.ProxyHandler,传入一个代理,这个代理是一个字典,字典的key依赖于代理服务器能够接收的类型,一般是http或者https,值是ip:port

  • 使用上一步创建的handler,以及request.bulid_opener创建一个opener对象。

  • 使用上一步创建的opener,调用open函数,发起请求。


    from urllib import request

    # 代码上如何使用代理

    # 构建免费代理
    # 免费代理
    proxy = {
        'http' : 'http://122.72.18.34:80',
        'https' : 'http://122.72.18.34:80',
    }

    # 认证代理
    auth_proxy = {
        'http': 'http://alice:123456@120.78.166.84:6666',
        'https': 'http://alice:123456@120.78.166.84:6666',
    }

    proxy_handler = request.ProxyHandler(auth_proxy) # 传入一个代理
    opener = request.build_opener(proxy_handler)

    response = opener.open('http://www.baidu.com/s?wd=ip')

    print(response)
    print(response.read().decode('utf-8'))

随机获取代理


    from urllib import request
    import random
    import re

    proxies = [
        {
            'http' : 'http://60.255.186.169:8888',
            'https' : 'http://60.255.186.169:8888',
        },
        {
            'http': 'http://alice:123456@120.78.166.84:6666',
            'https': 'http://alice:123456@120.78.166.84:6666',
        }
    ]

    def getOpener():
        proxy = random.choice(proxies)
        proxy_handler = request.ProxyHandler(proxy)
        opener = request.build_opener(proxy_handler)
        return opener

    base_url = 'http://www.baidu.com/s?wd=ip'
    for i in range(1,10):
        opener = getOpener()
        try:
            response = opener.open(base_url,timeout=10)
            html = response.read().decode('utf-8')
            ip_pat = re.compile(r'c-gap-right">(.*?)</span>')
            res = ip_pat.search(html)
            if res is not None:
                print(res.group(1))
        except Exception as e:
            print(e)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值