Python爬取代理池并清洗可用IP
本次是一个临时项目,因为需要代理IP进行项目中的测试,所以本次只是写了一个高耦合性的脚本。
我比较喜欢使用虚拟解释器,整理三方库比较清晰
依赖安装
pip install requests
pip install beautifulsoup4
一、爬取免费代理池
这里选用的https://www.kuaidaili.com/free/的开放代理。
使用reguests库直接get发现403 Forbidden,添加一个user-agent伪装浏览器。
import requestsurl = 'https://www.kuaidaili.com/free/'
headers = {"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit 537.36 (KHTML, like Gecko) Chrome"
}
html = requests.get(url, headers=headers)
print(html.text)
成功打印HTML
分析HTML后发现ip和端口都在表格内非常好处理,
使用beautifulsoup库处理
处理过程写在注释
soup = BeautifulSoup(html.text, features="html.parser")
# 获取所有行
data = soup.select('.table-bordered tr')
# 循环处理每一行
for value in data:# 获取所有列td = value.select('td')# 如果是表格主体(非表头)则进行处理if td is not None:ip = ''port = ''# 循环处理每一列,获取IP和端口for v in td:if v['data-title'] == 'IP':ip = v.stringif v['data-title'] == 'PORT':port = v.string# 清理空的IP或端口if ip != '' and port != '':# 写入ip.txtwith open("ip.txt", "a") as f:f.write(ip+':'+port+'\n')print('抓取到'+ip+':'+port+'并写入文件')
然后将其封装成获取器
然后处理分页
本来还以为需要分析
结果这个网站的分页是路由控制 那就省力了 直接拼接url就好了
然后写出分页器这里由于本项目需求没有抓取全部页面,所以靠for循环来控制页面
# 分页器
def pagination(start, end, sleep):for page in range(start, end):print('开始抓取第' + str(page) + '页的内容...')url = "https://www.kuaidaili.com/free/inha/" + str(page) + "/"spider(url)# 防止快速请求导致的问题设置睡眠时间time.sleep(sleep)
整个爬虫及整理数据的代码如下
import time
import requests
from bs4 import BeautifulSoup# 获取器
def spider(url):# url = 'https://www.kuaidaili.com/free/'headers = {"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit 537.36 (KHTML, like Gecko) Chrome"}html = requests.get(url, headers=headers)soup = BeautifulSoup(html.text, features="html.parser")# 获取所有行data = soup.select('.table-bordered tr')# 循环处理每一行for value in data:# 获取所有列td = value.select('td')# 如果是表格主体(非表头)则进行处理if td is not None:ip = ''port = ''# 循环处理每一列,获取IP和端口for v in td:if v['data-title'] == 'IP':ip = v.stringif v['data-title'] == 'PORT':port = v.string# 清理空的IP或端口if ip != '' and port != '':# 写入ip.txtwith open("ip.txt", "a") as f:f.write(ip + ':' + port + '\n')print('抓取到' + ip + ':' + port + '并写入文件')# 分页器
def pagination(start, end, sleep):for page in range(start, end):print('开始抓取第' + str(page) + '页的内容...')url = "https://www.kuaidaili.com/free/inha/" + str(page) + "/"spider(url)# 防止快速请求导致的问题设置睡眠时间time.sleep(sleep)if __name__ == "__main__":pagination(1, 200, 3)
运行后我们就拥有了一份ip.txt文件内存在200页的代理IP
二、IP清洗
这里我打算分两个脚本来执行,原因是设置睡眠时间会导致抓取的过程较长。两个脚本可以同步进行。
创建cleaner.py
清理器
def ip_cleaner(ip):try:requests.get('业务上需要检查的链接', proxies={"http": "http://" + ip})except:return 0else:return 1
主程序
import requestsdef main():with open("ip.txt", "r") as ins:for line in ins:# 清理换行符line = line.strip('\n')# 执行查询res = ip_cleaner(line)if res:with open("clear_ip.txt", "a") as f:f.write(line + '\n')print(line + ' success')else:print(line + ' failed')def ip_cleaner(ip):try:requests.get('https://telegram.org/', proxies={"http": "http://" + ip})except:return 0else:return 1if __name__ == "__main__":main()
这样整个爬取加清洗的过程就完成了。
Python爬取代理池并清洗可用IP相关推荐
- Python获取代理池和提取可用IP
Python获取代理池和提取可用IP 前言 正文 请求代理池 筛选代理ip 保存可用的代理ip 把代理ip转发到本地(可选) 总结 前言 最近在学习Python爬虫的编写,发现很多网站设置了ip限制, ...
- 带你用Python爬取代理
带你用Python爬取代理 第一步 导入库: import requests,xml.etree.ElementTree as ET 说明: Requests:请求库,用于请求API网址 xml.et ...
- 记一次用Python爬取代理IP并使用(尝试用代理IP制造直播房间访问量)
前言 首先说一下代理IP的用法途(代码中会有涉及):代理IP可以用来隐藏你的真实IP,你访问网站是通过代理服务器来做一个中转,所以目标服务器只能看到代理服务器的IP地址,这样就可以让你的IP地址实现隐 ...
- python爬取代理IP并进行有效的IP测试
爬取代理IP及测试是否可用 很多人在爬虫时为了防止被封IP,所以就会去各大网站上查找免费的代理IP,由于不是每个IP地址都是有效的,如果要进去一个一个比对的话效率太低了,我也遇到了这种情况,所以就直接 ...
- Python爬取代理IP
在一些网页的内容爬取过程中,有时候在单位时间内如果我们发送的请求次数过多,网站就可能会封掉我们的IP地址,这时候为了保证我们的爬虫的正常运行,我们就要使用代理IP. 下面来介绍如何构建自己的IP池. ...
- python爬取去哪网数据_python最强的代理池,突破IP的封锁爬取海量数据(送项目源码)...
一个强大到超乎你的想象的异步IP池项目--async-proxy-pool 随着大型网站反扒机制的增强,更改IP登陆已经成为一种最高效的方式,为此打造一款超强IP池项目,采用最新最快的Python技术 ...
- python 爬取西刺ip代理池
1. 如何在requests中设置ip代理 最直接的用法,在get中添加proxies设置ip代理 proxies = {'https': 'http://183.148.153.147:9999/' ...
- Python爬虫-代理池-爬取代理入库并测试代理可用性
目的:建立自己的代理池.可以添加新的代理网站爬虫,可以测试代理对某一网址的适用性,可以提供获取代理的 API. 整个流程:爬取代理 ----> 将代理存入数据库并设置分数 ----> 从数 ...
- python爬取身份证信息、爬取ip代理池
匹配的分类 按照匹配内容进行匹配 我们在匹配的过程当中,按照要匹配的内容的类型和数量进行匹配 比如: 匹配手机号:匹配以1开头的11位数字 Re 按照匹配结构进行匹配 我们我们在匹配的过程当中,按照要 ...
最新文章
- NetBpm 组织架构(4)
- 推荐系统炼丹笔记:推荐算法特征交叉新方式CAN
- Qt Designer的信号和插槽编辑模式
- UVa10129(还没ac)各种re,o(╥﹏╥)o
- 「mysql优化专题」详解引擎(InnoDB,MyISAM)的内存优化攻略?(9)
- 面试官问:一个Java字符串中到底能有多少个字符?
- 个人发卡网源码 仿企业版v2.8
- 格式化字符串漏洞利用 六、特殊案例
- 网易严选退出双十一:“抵制”鼓吹过度消费
- 企业部署BI系统怎么能一直做下去,PDCA闭环是关键
- int 转 const char*
- tensorflow pb ckpt pbtxt
- Excel之DateDif函数
- MATLAB如何输出图形到CAD或者UG,ug里面怎么导出cad图形
- MATLAB机器人机械臂运动学正逆解、动力学建模仿真与轨迹规划
- python爬取大学生就业分析专科和本科的信息https://edu.jobui.com/major/(上)JSON的存储
- 《编程之美》背后的作者之美
- java实心圆_html5使用canvas画空心圆与实心圆
- Axure 8.1.0.3377 注册码激活
- 2017,越努力才能越幸运