文章目录

  • 前言
  • 简介
  • 代码
  • 如何调用结果
  • 总结

前言

常见的反爬虫措施之一,就是查看用户发起请求的IP地址,若很频繁,则封IP。我们可以通过使用动态代理IP池实现反爬虫。百度搜索:爬虫IP池, 就有很多网站,这些网站一般都有提供免费的代理IP。但是这些IP质量不高,需要自己手动复制粘贴,测试后再使用,效率底下。我们可以写个爬虫,批量获取免费IP,自动测试后,再使用。

本篇文章使用的目标网址为:proxy list。本教程中不解析页面,而是直接获取json格式。因为HTTP较少,所以本文章只获取其中HTTPS类型的IP地址。使用的检查IP的网址为:https://icanhazip.com/

读者可以直接复制所有代码,新建py文件后,粘贴运行即可。2021.4.5亲测有效

此教程为获取https的,获取http的教程为:通过爬虫获取免费IP代理,搭建自己的IP池(http)

简介

传入URL地址,返回可用的IP地址list列表

  • __init __ :设置请求头,请求地址(直接是json格式)
  • check_ip : 检查IP地址是否可用,返回可用的当前页面上的IP地址list和端口号
  • run: 程序主代码

代码

import requests
import jsonclass FreeIP():def __init__(self):self.url = "http://proxylist.fatezero.org/proxy.list"self.headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36"}def check_ip(self, ip_list):correct_ip = []for ip in ip_list:if len(correct_ip) > 10: # 可以根据自己的需求进行更改或者注释掉breakip_port = "{}:{}".format(ip["host"],ip["port"])proxies = {'https': ip_port}try:response = requests.get('https://icanhazip.com/', proxies=proxies,timeout=3).text  # 如果请求该网址,返回的IP地址与代理IP一致,则认为代理成功# 可以更改timeout时间if response.strip() == ip["host"]:print("可用的IP地址为:{}".format(ip_port))correct_ip.append(ip_port)except:print("不可用的IP地址为:{}".format(ip_port))return correct_ipdef run(self):response =  requests.get(url=self.url).content.decode()ip_list = []proxies_list = response.split('\n')for proxy_str in proxies_list:try:proxy = {}proxy_json = json.loads(proxy_str)if proxy_json["anonymity"] == "high_anonymous" and proxy_json["type"] == "https":host = proxy_json['host']port = proxy_json['port']proxy["host"] = hostproxy["port"] = portip_list.append(proxy)print("{}符合https和高匿条件".format(host))except:print(proxy_str)correct_ip = self.check_ip(ip_list)print("可用的IP地址有{}个".format(len(correct_ip)))print(correct_ip)if __name__ == '__main__':ip = FreeIP()ip.run()

如何调用结果

  • (不推荐)可以将此代码复制到自己的爬虫代码里,每次调用free_ip.get_ip(),获得list。该方法不推荐,因为会使网站并发量大,并且小型爬虫项目不需要这么多代理IP。
  • (推荐)手动复制控制台里的IP地址信息,粘贴到代码中,作为初始化IP地址,然后每次随机选择一个IP地址请求。
    url = 'http://icanhazip.com/'
    # 注意,底下的[]内容为复制粘贴上的
    ip =['149.28.58.133:8080', '134.209.218.104:8080', '157.245.252.104:8080', '157.230.85.89:8080', '62.151.183.160:3128', '68.183.102.160:8080', '44.192.64.137:80', '134.209.70.67:8080', '169.57.1.84:80', '157.230.208.88:8080', '157.230.227.106:8080']
    for i in range(100):try:real_ip = random.choice(ip)proxy = {'http':real_ip}res_text = requests.get(url=url,proxies=proxy, timeout = 3)print("成功")except:print("{}不可用".format(real_ip))ip.remove(real_ip)
    

总结

  • HTTPS端口号,可以请求http、https网址
  • 有的同学设置请求的时候,发现在设置proxy时,如果为http,而目标url为https,也能请求成功。这是误区,因为如果proxy里的类型和url类型不同时,请求的IP地址并不是代理IP地址,而是本机的IP,具体可以通过IP地址网站实验

通过爬虫获取免费IP代理,搭建自己的IP池(https)相关推荐

  1. 利用爬虫获取免费IP代理

    项目目标 通过爬虫获取"西拉代理"(http://www.xiladaili.com)上的高匿代理,并储存至一个列表. 项目分析 首先对网页进行观察,主体内容如下图所示. 不但指明 ...

  2. Python每日一练(24)-requests 模块获取免费的代理并检测代理 IP 是否有效

    目录 1. 通过代理服务发送请求 2. 获取免费的代理 IP 3. 检测代理 IP 是否有效 1. 通过代理服务发送请求 在爬取网页的过程中,经常会出现不久前可以爬取的网页现在无法爬取的情况,这是因为 ...

  3. 在线网页代理api 获取免费的代理地址

    在线网页代理api,获取免费的代理地址,不间断更新. 接口名称:在线网页代理api 接口平台:开源接口 接口地址:http://japi.juheapi.com/japi/fatch 支持格式:jso ...

  4. 使用python为爬虫获取免费代理ip

    免费代理ip的爬取 爬虫一直是python使用的一个重要部分,而许多网站也为此做了许多反爬措施,其中爬虫访问过于频繁直接封ip地址也作为一种"伤敌一千,自损八百"的方法被许多网站采 ...

  5. 八 web爬虫讲解2—urllib库爬虫—ip代理—用户代理和ip代理结合应用

    使用IP代理 ProxyHandler()格式化IP,第一个参数,请求目标可能是http或者https,对应设置 build_opener()初始化IP install_opener()将代理IP设置 ...

  6. 动态ip代理秘籍:隐藏ip的方法要得跟***学

    对于这壹问题,其他常见的有若干方法,当然还有不常见的高级方法,小编这就不透露了,小编怕被码农界的各位大佬拍死! 方法壹: 用代理IP是可以查出源ip的.隐匿ip这种说法其实很不实际,网络运营商总会知道 ...

  7. 爬虫获取免费代理IP

    创建文件UserAgent.py 写入: import randomuser_agent = ["Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6 ...

  8. python爬虫实战:爬取西刺代理网站,获取免费的代理IP

    爬取的网站链接:西刺网站 import requests import chardet import random import time from bs4 import BeautifulSoup ...

  9. 什么是ip代理?如何选择ip代理?ip代理哪家好?

    有时候我们希望保护自己的隐私,或者防止网络攻击,或者需要访问一些限制访问的网站.这时候,我们就需要使用代理IP. 代理IP是一种特殊的网络服务,它可以接收客户端发来的请求,并将这些请求转发给真正的目标 ...

  10. python利用proxybroker构建爬虫免费IP代理池!不用担心被封了!

    大纲 前言 ProxyBroker简介 ProxyBroker安装 在终端使用ProxyBroker 在代码中使用ProxyBroker 总结 前言 写爬虫的小伙伴可能遇到过这种情况: 正当悠闲地喝着 ...

最新文章

  1. Django 查询很经典的
  2. 【BZOJ】1003: [ZJOI2006]物流运输trans(SPFA+DP)
  3. escape()、encodeURI()、encodeURIComponent()区别详解
  4. MFC类结构-1、CObject类
  5. 软件工程:第五章作业
  6. linux查看数据积压,查看kafka消息队列的积压情况
  7. 浅谈:云桌面在我国高校的应用前景
  8. 开启弹窗_PC端广告弹窗拦截
  9. oj 小黑华丽的逆袭机会
  10. Linux运维常用命令及知识
  11. Atitit java 原生 客户端 native desktop桌面 javafx 浏览器环境 导入jar jfxrt.jar 17M package com.attilax.ui;
  12. php仿歪歪漫画系统源码
  13. mysql中使用order by 排序时使用if()函数应用场景。
  14. (真实经验)我干了5年的JAVA面试官,发现很多求职者都忽略这七大方面的问题!
  15. 如何在Mac终端删除U盘的隐藏文件
  16. Dubbo3.0 整合 Nacos
  17. 用户 '****' 登录失败
  18. MES入门.浅谈ISA-95
  19. Java怎样把时间转成毫秒_如何转换时间格式 java如何把时间格式转为毫秒
  20. 用Spring Cloud和Docker搭建微服务平台

热门文章

  1. 飞机选座——附:东航320选坐攻略
  2. Win10 Edge浏览器设置默认bing/google为搜索引擎教程
  3. 如何爬取ajax网页之爬取雪球网文章
  4. 常用大数据核心技术有哪些?
  5. 应用程序正常初始化失败 VS2005
  6. 计算机丢失msvcr100.dll解决办法,如何解决Msvcr100.dll丢失问题?两种方法可以解决...
  7. 答题卡php,答题卡答题注意事项 - 窗外事 - 简单学习网论坛_中高考学习交流论坛_中学生学习论坛 - Powered by phpwind...
  8. 完美解决电脑老是弹出广告窗口!
  9. 一个多重阴影的DIV框框
  10. Hello MySQL(四)——MySQL数据库创建实例