通过爬虫获取免费IP代理,搭建自己的IP池(https)
文章目录
- 前言
- 简介
- 代码
- 如何调用结果
- 总结
前言
常见的反爬虫措施之一,就是查看用户发起请求的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)相关推荐
- 利用爬虫获取免费IP代理
项目目标 通过爬虫获取"西拉代理"(http://www.xiladaili.com)上的高匿代理,并储存至一个列表. 项目分析 首先对网页进行观察,主体内容如下图所示. 不但指明 ...
- Python每日一练(24)-requests 模块获取免费的代理并检测代理 IP 是否有效
目录 1. 通过代理服务发送请求 2. 获取免费的代理 IP 3. 检测代理 IP 是否有效 1. 通过代理服务发送请求 在爬取网页的过程中,经常会出现不久前可以爬取的网页现在无法爬取的情况,这是因为 ...
- 在线网页代理api 获取免费的代理地址
在线网页代理api,获取免费的代理地址,不间断更新. 接口名称:在线网页代理api 接口平台:开源接口 接口地址:http://japi.juheapi.com/japi/fatch 支持格式:jso ...
- 使用python为爬虫获取免费代理ip
免费代理ip的爬取 爬虫一直是python使用的一个重要部分,而许多网站也为此做了许多反爬措施,其中爬虫访问过于频繁直接封ip地址也作为一种"伤敌一千,自损八百"的方法被许多网站采 ...
- 八 web爬虫讲解2—urllib库爬虫—ip代理—用户代理和ip代理结合应用
使用IP代理 ProxyHandler()格式化IP,第一个参数,请求目标可能是http或者https,对应设置 build_opener()初始化IP install_opener()将代理IP设置 ...
- 动态ip代理秘籍:隐藏ip的方法要得跟***学
对于这壹问题,其他常见的有若干方法,当然还有不常见的高级方法,小编这就不透露了,小编怕被码农界的各位大佬拍死! 方法壹: 用代理IP是可以查出源ip的.隐匿ip这种说法其实很不实际,网络运营商总会知道 ...
- 爬虫获取免费代理IP
创建文件UserAgent.py 写入: import randomuser_agent = ["Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6 ...
- python爬虫实战:爬取西刺代理网站,获取免费的代理IP
爬取的网站链接:西刺网站 import requests import chardet import random import time from bs4 import BeautifulSoup ...
- 什么是ip代理?如何选择ip代理?ip代理哪家好?
有时候我们希望保护自己的隐私,或者防止网络攻击,或者需要访问一些限制访问的网站.这时候,我们就需要使用代理IP. 代理IP是一种特殊的网络服务,它可以接收客户端发来的请求,并将这些请求转发给真正的目标 ...
- python利用proxybroker构建爬虫免费IP代理池!不用担心被封了!
大纲 前言 ProxyBroker简介 ProxyBroker安装 在终端使用ProxyBroker 在代码中使用ProxyBroker 总结 前言 写爬虫的小伙伴可能遇到过这种情况: 正当悠闲地喝着 ...
最新文章
- Django 查询很经典的
- 【BZOJ】1003: [ZJOI2006]物流运输trans(SPFA+DP)
- escape()、encodeURI()、encodeURIComponent()区别详解
- MFC类结构-1、CObject类
- 软件工程:第五章作业
- linux查看数据积压,查看kafka消息队列的积压情况
- 浅谈:云桌面在我国高校的应用前景
- 开启弹窗_PC端广告弹窗拦截
- oj 小黑华丽的逆袭机会
- Linux运维常用命令及知识
- Atitit java 原生 客户端 native desktop桌面 javafx 浏览器环境 导入jar jfxrt.jar 17M package com.attilax.ui;
- php仿歪歪漫画系统源码
- mysql中使用order by 排序时使用if()函数应用场景。
- (真实经验)我干了5年的JAVA面试官,发现很多求职者都忽略这七大方面的问题!
- 如何在Mac终端删除U盘的隐藏文件
- Dubbo3.0 整合 Nacos
- 用户 '****' 登录失败
- MES入门.浅谈ISA-95
- Java怎样把时间转成毫秒_如何转换时间格式 java如何把时间格式转为毫秒
- 用Spring Cloud和Docker搭建微服务平台
热门文章
- 飞机选座——附:东航320选坐攻略
- Win10 Edge浏览器设置默认bing/google为搜索引擎教程
- 如何爬取ajax网页之爬取雪球网文章
- 常用大数据核心技术有哪些?
- 应用程序正常初始化失败 VS2005
- 计算机丢失msvcr100.dll解决办法,如何解决Msvcr100.dll丢失问题?两种方法可以解决...
- 答题卡php,答题卡答题注意事项 - 窗外事 - 简单学习网论坛_中高考学习交流论坛_中学生学习论坛 - Powered by phpwind...
- 完美解决电脑老是弹出广告窗口!
- 一个多重阴影的DIV框框
- Hello MySQL(四)——MySQL数据库创建实例