本次是一个临时项目,因为需要代理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相关推荐

  1. Python获取代理池和提取可用IP

    Python获取代理池和提取可用IP 前言 正文 请求代理池 筛选代理ip 保存可用的代理ip 把代理ip转发到本地(可选) 总结 前言 最近在学习Python爬虫的编写,发现很多网站设置了ip限制, ...

  2. 带你用Python爬取代理

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

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

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

  4. python爬取代理IP并进行有效的IP测试

    爬取代理IP及测试是否可用 很多人在爬虫时为了防止被封IP,所以就会去各大网站上查找免费的代理IP,由于不是每个IP地址都是有效的,如果要进去一个一个比对的话效率太低了,我也遇到了这种情况,所以就直接 ...

  5. Python爬取代理IP

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

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

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

  7. python 爬取西刺ip代理池

    1. 如何在requests中设置ip代理 最直接的用法,在get中添加proxies设置ip代理 proxies = {'https': 'http://183.148.153.147:9999/' ...

  8. Python爬虫-代理池-爬取代理入库并测试代理可用性

    目的:建立自己的代理池.可以添加新的代理网站爬虫,可以测试代理对某一网址的适用性,可以提供获取代理的 API. 整个流程:爬取代理 ----> 将代理存入数据库并设置分数 ----> 从数 ...

  9. python爬取身份证信息、爬取ip代理池

    匹配的分类 按照匹配内容进行匹配 我们在匹配的过程当中,按照要匹配的内容的类型和数量进行匹配 比如: 匹配手机号:匹配以1开头的11位数字 Re 按照匹配结构进行匹配 我们我们在匹配的过程当中,按照要 ...

最新文章

  1. NetBpm 组织架构(4)
  2. 推荐系统炼丹笔记:推荐算法特征交叉新方式CAN
  3. Qt Designer的信号和插槽编辑模式
  4. UVa10129(还没ac)各种re,o(╥﹏╥)o
  5. 「mysql优化专题」详解引擎(InnoDB,MyISAM)的内存优化攻略?(9)
  6. 面试官问:一个Java字符串中到底能有多少个字符?
  7. 个人发卡网源码 仿企业版v2.8
  8. 格式化字符串漏洞利用 六、特殊案例
  9. 网易严选退出双十一:“抵制”鼓吹过度消费
  10. 企业部署BI系统怎么能一直做下去,PDCA闭环是关键
  11. int 转 const char*
  12. tensorflow pb ckpt pbtxt
  13. Excel之DateDif函数
  14. MATLAB如何输出图形到CAD或者UG,ug里面怎么导出cad图形
  15. MATLAB机器人机械臂运动学正逆解、动力学建模仿真与轨迹规划
  16. python爬取大学生就业分析专科和本科的信息https://edu.jobui.com/major/(上)JSON的存储
  17. 《编程之美》背后的作者之美
  18. java实心圆_html5使用canvas画空心圆与实心圆
  19. Axure 8.1.0.3377 注册码激活
  20. 2017,越努力才能越幸运

热门文章

  1. 2023最新谷歌翻译修复
  2. (原创)狂战士奥拉夫攻略-详细打法分析
  3. python_day13_js
  4. AD(阿尔茨海默病)诊断初解
  5. G - 翻翻棋 FZU - 2230
  6. 程序员不要对自己做的20件事
  7. JMH230-【亲测】首家整理全套【剑侠情缘网络版Ⅱ】剑网2+降龙端+外网+视频搭建+各种配套工具
  8. linux缺失库文件,Linux系统下确实库文件的解决办法
  9. 怎么给word加底纹
  10. 豌豆荚codis描述