技术心得记录:如何通过爬取西刺代理建立自己的代理池

简介: 技术心得记录:如何通过爬取西刺代理建立自己的代理池

最近正在筹划爬取一些大型网站的数据,因为预想到这些网站的反爬措施比较多。首先筹备建立自己的一个代理池,手工测试了一下国内的开源的免费代理,发现西刺代理的可用率比较高,今天就写一个爬虫,爬取西刺代理可用的代理池。


步骤是:


1.抓取西刺代理的网页文件


2.通过正则解析代理


3.通过访问baidu测试可用的代理


4.讲可用代理写入文本文件中


5.结合花刺代理使用


1 # -- coding: utf-8 --


2 import urllib.request


3 import urllib.parse


4 import re


5


6 def handle_request(url,page):


7 #拼接成指定页面的url


8 url = url + str(page)


9 print(url)


10 headers={


11 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36',


12 //代码效果参考:http://www.lyjsj.net.cn/wx/art_23725.html

}

13


14 #生成请求对象


15 request = urllib.request.Request(url=url,headers=headers)


16 return request


17


18 def parse_content(content):


19


20 pattern = re.compile(r'(\b(?:(?:25【0-5】|2【0-4】【0-9】|【01】?【0-9】【0-9】?).){3}(?:25【0-5】|2【0-4】【0-9】|【01】?【0-9】【0-9】?)\b).?(\d+).?.?.?(.*?)',re.S)


21 #通过正则处理,通过分组符号()得到一组元组的列表,元组中第一个元素是IP,第二个元素是端口,第三个元素室协议


22 lt = pattern.findall(content)


23


24 return lt


25


26 def test_agent(agent):


27 #使用百度测试代理


28 url = ""


29 headers={


30 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 //代码效果参考:http://www.lyjsj.net.cn/wz/art_23723.html

(KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36',

31 }


32 #拼接ip_port字段


33 ip_port = agent【0】+':'+agent【1】


34 #创建handler对象


35 handler = urllib.request.ProxyHandler({agent【2】:ip_port})


36 #创建opener对象


37 print("zheli")


38 opener = urllib.request.build_opener(handler)


39 #生成请求对象


40 try:


41 request = urllib.request.Request(url=url,headers=headers)


42 #发送请求,得到返回状态


43 try :


44 response = opener.open(request,timeout=10)


45 if response.getcode() == 200:


46 print("ip可用")


47 return True


48 else:


49 print("ip不可用")


50 return False


51 except Exception as e:


52 print(e)


53 except Exception as e:


54 print(e)


55


56


57


58 def main():


59 url = ''


60 start_page = int(input("请输入起始页:"))


61 end_page = int(input("请输入结束页;"))


62 for page in (start_page,end_page+1):


63 #获取请求对象


64 request = handle_request(url,page)


65


66 #获取网页文件


67 content = urllib.request.urlopen(request,timeout=10).read().decode()


68 #解析文件


69 lt = parse_content(content)


70 for agent in lt :


71 #测试代理是否能够被调用


72 if test_agent(agent) != False:


73 #第一个元素是IP


74 ip = agent【0】


75 #第二个元素是端口


76 port = agent【1】


77 #第三个元素是协议


78 protocal= agent【2】


79 #拼接成一行的字符串


80 string = '%s %s %s \n' %(ip,port,protocal)


81 #将字符串追加写到文件中


82 with open("ip_pool.txt","a") as fp:


83 fp.write(string)


84


85


86 #入口


87 if name =='main':


88 main()


89

相关文章
|
人工智能 API 开发者
FastAPI开发者福音!FastAPI-MCP:将FastAPI秒变MCP服务器的开源神器,无需配置自动转换!
FastAPI-MCP是一款能将FastAPI应用端点自动转换为符合模型上下文协议(MCP)的开源工具,支持零配置自动发现接口并保留完整文档和模式定义。
5918 113
FastAPI开发者福音!FastAPI-MCP:将FastAPI秒变MCP服务器的开源神器,无需配置自动转换!
|
JavaScript
Vue引入字节跳动图标库
Vue引入字节跳动图标库
750 0
Vue引入字节跳动图标库
|
9月前
|
人工智能 Ubuntu Unix
第 1 章 Linux 快速入门
Mainline 表示主线开发版本,Stable 表示稳定版本,稳定版本主要由 mainline 测试通过而发布。Longterm 表示长期支持版,会持续更新及 Bug 修复,如果长期版本被标记为 EOL(End of Life),则表示不再提供更新。
322 0
|
8月前
|
人工智能 并行计算 调度
中国计算产业,终于迈过了生态这道坎
一位算法开发者亲历昇腾迁移,原以为艰难,却发现CANN生态已趋完善。从“跑不通”到“怎么更快”,中国计算正走出至暗时刻。开源开放、人才培养、工程创新协同推进,CANN生态加速崛起,展现自主算力的韧性与希望。
261 0
|
Python
用python3快速读取30G+的txt文件
这篇文章介绍了如何使用Python分块读取大文件(如30G+的txt文件),通过设置每次读取的块大小来处理大型文本文件,以减少内存消耗并提高处理效率。
534 15
|
消息中间件 JSON Java
Spring Boot、Spring Cloud与Spring Cloud Alibaba版本对应关系
Spring Boot、Spring Cloud与Spring Cloud Alibaba版本对应关系
35486 1
|
Linux 网络性能优化 网络安全
Linux(openwrt)下iptables+tc工具实现网络流量限速控制(QoS)
通过以上步骤,您可以在Linux(OpenWrt)系统中使用iptables和tc工具实现网络流量限速控制(QoS)。这种方法灵活且功能强大,可以帮助管理员有效管理网络带宽,确保关键业务的网络性能。希望本文能够为您提供有价值的参考。
3115 28
|
消息中间件 运维 Java
RocketMQ的常规运维实践应用
RocketMQ的常规运维实践应用
|
Java Nacos Sentinel
牛逼!这份神仙级Spring Cloud Alibaba全套笔记,几乎涵盖了所有操作
Spring Cloud 和微服务的重要性大家都知道了,Spring Cloud 现在已经成了微服务事实上的标准框架,也是 Java 程序员必须掌握的技术系列之一。
|
IDE 数据可视化 TensorFlow
Anaconda和Python是什么关系?
Anaconda和Python是什么关系?
687 8

热门文章

最新文章