爬取代理IP及测试是否可用

很多人在爬虫时为了防止被封IP,所以就会去各大网站上查找免费的代理IP,由于不是每个IP地址都是有效的,如果要进去一个一个比对的话效率太低了,我也遇到了这种情况,所以就直接尝试了一下去网站爬取免费的代理IP,并且逐一的测试,最后将有效的IP进行返回。
在这里我选择的是89免费代理IP网站进行爬取,并且每一个IP都进行比对测试,最后会将可用的IP进行另存放为一个列表

https://www.89ip.cn/

一、准备工作

导入包并且设置头标签

import requests
from bs4 import BeautifulSoupheader = {'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'
}

二、提取网页源码

提取网页源码返回的是整个网站的HTML

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

三、解析HTML并提取IP

函数传入的参数是HTML和存放IP地址的列表

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

四、测试IP是否可用

在这里测试IP的原理是用requests请求百度网站,并且传入代理IP,如果网站返回状态码为200那么说明此IP有效,如果出现其他情况则判断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测试失败")

五、主函数main

主函数中主要负责调用函数和自定义页数指定生成URL,并且在程序结束前会输出有效IP地址

if __name__ == '__main__':valid_IP = []  # 有效IP地址for i in range(1, 90):  # 可自定义页数ip_list = []  # 存放所有爬取到的ipurl = "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)

代码整体框架已经结束完毕了,最后把所有代码呈现出了

完整代码

# -*- coding: utf-8 -*-
# Author : YRH
# Data : 2020/10/07
# Project : 爬取代理IP并且测试可用IP
# Tool : PyCharmimport requests
from bs4 import BeautifulSoupheader = {'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_encodingreturn reponse.textexcept:return "网页源码提取错误"# 解析网页,提取IP
def getIp(html, list):try:soup = BeautifulSoup(html, "html.parser")tr = soup.find("tbody").find_all_next("tr")for ip in tr:# 提取IPtd = ip.find_next("td").stringtd = str(td).replace(" ", "").replace("\n", "").replace("\t", "")# 提取端口号dk = ip.find_all_next("td")[1].stringdk = str(dk).replace(" ", "").replace("\n", "").replace("\t", "")# 将IP和端口号进行连接ip = td + ":" + dklist.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 = []  # 存放所有爬取到的ipurl = "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)

看到这里了,如果大家觉得有什么需要改进的或者有什么更好的建议可以在评论区提出来,然后大家共同进步,谢谢!!!

python爬取代理IP并进行有效的IP测试相关推荐

  1. 带你用Python爬取代理

    带你用Python爬取代理 第一步 导入库: import requests,xml.etree.ElementTree as ET 说明: Requests:请求库,用于请求API网址 xml.et ...

  2. 记一次用Python爬取代理IP并使用(尝试用代理IP制造直播房间访问量)

    前言 首先说一下代理IP的用法途(代码中会有涉及):代理IP可以用来隐藏你的真实IP,你访问网站是通过代理服务器来做一个中转,所以目标服务器只能看到代理服务器的IP地址,这样就可以让你的IP地址实现隐 ...

  3. Python爬取大量数据时,如何防止IP被封

    前两天我爬取了猪八戒上的一些数据网址::http://task.zbj.com/t-ppsj/p1s5.html,可能是由于爬取的数据量有点多吧,结果我的IP被封了,需要自己手动来验证解封ip,但这显 ...

  4. Python爬取大量数据时防止被封IP

    From:http://blog.51cto.com/7200087/2070320 基于scrapy框架的爬虫代理IP设置:https://www.jianshu.com/p/074c36a7948 ...

  5. Python爬取代理池并清洗可用IP

    本次是一个临时项目,因为需要代理IP进行项目中的测试,所以本次只是写了一个高耦合性的脚本. 我比较喜欢使用虚拟解释器,整理三方库比较清晰 依赖安装 pip install requests pip i ...

  6. Python爬取代理IP

    在一些网页的内容爬取过程中,有时候在单位时间内如果我们发送的请求次数过多,网站就可能会封掉我们的IP地址,这时候为了保证我们的爬虫的正常运行,我们就要使用代理IP. 下面来介绍如何构建自己的IP池. ...

  7. python爬取国内代理ip_Python语言爬取代理IP

    本文主要向大家介绍了Python语言爬取代理IP,通过具体的内容向大家展示,希望对大家学习Python语言有所帮助. #!/usr/bin/env python #-*-coding=utf-8 -* ...

  8. python爬取去哪网数据_python最强的代理池,突破IP的封锁爬取海量数据(送项目源码)...

    一个强大到超乎你的想象的异步IP池项目--async-proxy-pool 随着大型网站反扒机制的增强,更改IP登陆已经成为一种最高效的方式,为此打造一款超强IP池项目,采用最新最快的Python技术 ...

  9. python爬取高匿代理IP(再也不用担心会进小黑屋了)

    一起进步 为什么要用代理IP 很多数据网站,对于反爬虫都做了一定的限制,这个如果写过一些爬虫程序的小伙伴应该都深有体会,其实主要还是IP进了小黑屋了,那么为了安全,就不能使用自己的实际IP去爬取人家网 ...

最新文章

  1. 一生只见一次的大彗星今天来了!
  2. 2440裸机编程之四 外部中断
  3. 转发高人文章:以前写的一些有关代码签名/时间戳数字证书的东东
  4. C语言实验——大小写转换_JAVA
  5. Visual Studio Code中文文档(一)-快速入门
  6. 程序员面试题准备(1)单链表逆置
  7. javascript装饰者模式
  8. How is a Batch request handled in the backend
  9. java追加txt文件_java怎么追加写入txt文件
  10. redis发布订阅c接口_Redis 发布/订阅机制原理分析
  11. 新站结合熊掌号的实际操作 实现当天收录
  12. python django开发新闻聚合检索推荐_Django之聚合查询、分组查询、查询优化以及F、Q查询...
  13. Axure element 2.4.6元件库
  14. 使用u盘安装linux操作系统原理
  15. 软件测试-正交试验法
  16. 每周论文精读04——A Survey on 3D Hand Pose Estimation: Cameras, Methods, and Datasets
  17. win10设置计算机关机时间,win10怎样固定时间关机_win10怎样设置电脑关机时间设置...
  18. 卢卡斯定理 Lucas
  19. 使用uniapp做海报的坑
  20. android 短信发件箱,android将发送短信写入发件箱

热门文章

  1. SpringCloud的认识和基本入门使用
  2. 乐酷工作室孙志伟:Testin云测试有广度有深度 省钱省力值得信赖
  3. 5700:还钱问题(贪心+思维)
  4. 08s01 mysql_Mysql:SQL 错误 [08S01]: Communications link failure
  5. 单片机定时器一1ms12MHz_【51单片机】基于STC89C52RC的多路电压采集系统
  6. windows 重启后电脑时间不准怎么办?
  7. php belongsto,php-Laravel:belongsTo()关系假定一对多关系,而不是一对一关系
  8. VISIO无法插入到word,ppt中
  9. # Alpha冲刺之事后诸葛亮
  10. 电子计算机没电了,主板电池没电了怎么办 主板电池没电会出现什么情况