可靠:Python请求https网站代理IP爬取

本脚本使用了 烂笔头 - j_hao104 提供的API接口

原作者官网:烂笔头 - j_hao104的博客 (spiderpy.cn)

本次脚本改良了以下:

  1. 避免重复测试已经核验代理有效性的代理(减少对测试请求网站的服务器压力);
  2. 增加循环次数,防止api返回代理重复(作者的API接口太容易出现大量雷同的);
  3. 增加双重检验程序:通过状态码(status_code == 200)+ IP请求地址确认(只要返回IP不是我本地就行);
  4. 优化代码,毕竟现在大部分网站都是https,很少会有http了(用http肯定能访问https,防止部分以为成功代理,但其实并不是真实代理);
  5. UA随机模拟部分代码可以删除,不影响代码整体;

运行结果:

本地IP:117.***.***.102
ipCallback({ip:"81.68.254.55"})
代理 81.68.254.55:3128 请求成功
ipCallback({ip:"139.9.64.238"})
代理 139.9.64.238:443 请求成功
====================
全部检索完毕!
可用IP代理如下:
['81.68.254.55:3128', '139.9.64.238:443']
====================
>>> 

脚本代码:

import requests
from sqlalchemy import all_
from fake_useragent import UserAgent

def get_proxy():
    return requests.get("http://demo.spiderpy.cn/get/").json()
def confirm_proxy():
    ip = requests.get('http://httpbin.org/ip')
    my_ip = (ip.json())["origin"]
    print("本地IP:{}".format(my_ip))
    retry_count = 100
    proxies_list = []
    false_list = []
    while retry_count > 0:
        retry_count -= 1
        proxy = get_proxy().get("proxy")
        #print(proxy)
        if proxy in proxies_list or proxy in false_list:
            #print("该代理 {} 已经在列表中,跳过!".format(proxy))
            continue
        try:
            headers= {'User-Agent':str(UserAgent(verify_ssl=False).random)}
            html = requests.get('https://www.taobao.com/help/getip.php', proxies={"https": "https://{}".format(proxy)}, headers=headers, timeout=30)
            print(html.text)
            if html.status_code == 200:
                if (proxy.split(":")[0] in html.text) != my_ip:
                    print("代理 {} 请求成功".format(proxy))
                    proxies_list.append(proxy)
        except Exception:
            false_list.append(proxy)
            #print("代理 {} 请求失败".format(proxy))
    return proxies_list

sumlist = confirm_proxy()
print("="*20)
print("全部检索完毕!\n可用IP代理如下:")
print(sumlist)
print("="*20)

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值