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

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

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


步骤是:


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

相关文章
|
机器学习/深度学习
自己搭建代理IP池有哪些好处呢?
自己搭建代理IP池有哪些好处呢?
177 8
|
数据采集 Python
动态IP代理技术的实际使用
动态IP代理技术的实际使用
290 5
|
NoSQL 数据可视化 关系型数据库
推荐几个好用的redis可视化工具
推荐几个好用的redis可视化工具
16686 1
|
NoSQL Redis
Redis安装布隆(Bloom Filter)过滤器
Redis安装布隆(Bloom Filter)过滤器
762 0
Redis安装布隆(Bloom Filter)过滤器
如何建立自己的代理IP池
如何建立自己的代理IP池
1139 6
|
数据可视化 JavaScript 架构师
D3.js实战:数据可视化高级技巧实例应用
本文介绍了D3.js入门,包括创建HTML文件引入库、绘制简单线图、柱状图和饼图。示例展示了数据绑定、交互性和动画效果,如柱状图的悬停效果和线图的数据平滑过渡。此外,还提及力导向图和地图可视化的实现,以及使用Enter, Update, Exit模式进行动态更新。最后提到了复杂图表和高级技巧,如使用组件库、动画、交互性和性能优化。
475 0
|
存储 消息中间件 NoSQL
两万字长文让你彻底掌握 celery
两万字长文让你彻底掌握 celery
4341 0
|
UED C++ Python
GUI开发入门指南
GUI开发入门指南
|
数据采集 安全 测试技术
什么是代理IP池?如何判断IP池优劣?
什么是代理IP池?如何判断IP池优劣?
549 5
|
Python
Python中的逻辑运算符:且(and)与或(or)
Python中的逻辑运算符:且(and)与或(or)
5577 0