圆月山庄资源网 Design By www.vgjia.com
爬取代理IP及测试是否可用
很多人在爬虫时为了防止被封IP,所以就会去各大网站上查找免费的代理IP,由于不是每个IP地址都是有效的,如果要进去一个一个比对的话效率太低了,我也遇到了这种情况,所以就直接尝试了一下去网站爬取免费的代理IP,并且逐一的测试,最后将有效的IP进行返回。
在这里我选择的是89免费代理IP网站进行爬取,并且每一个IP都进行比对测试,最后会将可用的IP进行另存放为一个列表
https://www.89ip.cn/
一、准备工作
导入包并且设置头标签
import requests from bs4 import BeautifulSoup header = { '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_encoding return reponse.text except: 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: # 提取IP td = ip.find_next("td").string td = str(td).replace(" ", "").replace("\n", "").replace("\t", "") # 提取端口号 dk = ip.find_all_next("td")[1].string dk = str(dk).replace(" ", "").replace("\n", "").replace("\t", "") # 将IP和端口号进行连接 ip = td + ":" + dk list.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 = [] # 存放所有爬取到的ip url = "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 : PyCharm import requests from bs4 import BeautifulSoup header = { '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_encoding return reponse.text except: return "网页源码提取错误" # 解析网页,提取IP def getIp(html, list): try: soup = BeautifulSoup(html, "html.parser") tr = soup.find("tbody").find_all_next("tr") for ip in tr: # 提取IP td = ip.find_next("td").string td = str(td).replace(" ", "").replace("\n", "").replace("\t", "") # 提取端口号 dk = ip.find_all_next("td")[1].string dk = str(dk).replace(" ", "").replace("\n", "").replace("\t", "") # 将IP和端口号进行连接 ip = td + ":" + dk list.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 = [] # 存放所有爬取到的ip url = "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
圆月山庄资源网 Design By www.vgjia.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
圆月山庄资源网 Design By www.vgjia.com
暂无评论...
RTX 5090要首发 性能要翻倍!三星展示GDDR7显存
三星在GTC上展示了专为下一代游戏GPU设计的GDDR7内存。
首次推出的GDDR7内存模块密度为16GB,每个模块容量为2GB。其速度预设为32 Gbps(PAM3),但也可以降至28 Gbps,以提高产量和初始阶段的整体性能和成本效益。
据三星表示,GDDR7内存的能效将提高20%,同时工作电压仅为1.1V,低于标准的1.2V。通过采用更新的封装材料和优化的电路设计,使得在高速运行时的发热量降低,GDDR7的热阻比GDDR6降低了70%。
更新日志
2024年11月02日
2024年11月02日
- 《暗喻幻想》顺风耳作用介绍
- 崔健1985-梦中的倾诉[再版][WAV+CUE]
- 黄子馨《追星Xin的恋人们2》HQ头版限量编号[WAV+CUE]
- 孟庭苇《情人的眼泪》开盘母带[低速原抓WAV+CUE]
- 孙露《谁为我停留HQCD》[低速原抓WAV+CUE][1.1G]
- 孙悦《时光音乐会》纯银CD[低速原抓WAV+CUE][1.1G]
- 任然《渐晚》[FLAC/分轨][72.32MB]
- 英雄联盟新英雄安蓓萨上线了吗 新英雄安蓓萨技能介绍
- 魔兽世界奥杜尔竞速赛什么时候开启 奥杜尔竞速赛开启时间介绍
- 无畏契约CGRS准星代码多少 CGRS准星代码分享一览
- 张靓颖.2012-倾听【少城时代】【WAV+CUE】
- 游鸿明.1999-五月的雪【大宇国际】【WAV+CUE】
- 曹方.2005-遇见我【钛友文化】【WAV+CUE】
- Unity6引擎上线:稳定性提升、CPU性能最高提升4倍
- 人皇Sky今日举行婚礼!电竞传奇步入新篇章