python实现ip代理池功能示例
本文实例讲述了python实现ip代理池功能。分享给大家供大家参考,具体如下:
爬取的代理源为西刺代理。
- 用xpath解析页面
- 用telnet来验证ip是否可用
- 把有效的ip写入到本地txt中。当然也可以写入到redis、mongodb中,也可以设置检测程序当代理池中的ip数不够(如:小于20个)时,启动该脚本来重新获取ip,本脚本的代码也要做相应的改变。
#!/usr/bin/envpython #-*-coding:utf-8-*- #@Version:1.0 #@Time:2018/10/23上午10:40 #@Author:Yeoman #@Description: importurllib.request importlxml.etree importtelnetlib importos headers={ 'User-Agent':'Mozilla/5.0(Macintosh;IntelMacOSX10_12_2)AppleWebKit/537.36(KHTML,likeGecko)Chrome/70.0.3538.67Safari/537.36' } defget_proxy(page_num): #获取页面 req=urllib.request.Request('http://www.xicidaili.com/nn/{}'.format(page_num),headers=headers)#构造request请求 response=urllib.request.urlopen(req)#发送请求 html=response.read() html=html.decode('utf-8') #print(html) #解析页面 proxy_list=[] selector=lxml.etree.HTML(html) rows=selector.xpath('//*[@id="ip_list"]//tr') rows_total=len(rows) row_xpath_head='//*[@id="ip_list"]//tr[' row_ip_xpath_tail=']/td[2]/text()' row_port_xpath_tail=']/td[3]/text()' foriinrange(1,rows_total): ip_xpath=row_xpath_head+str(i+1)+row_ip_xpath_tail port_xpath=row_xpath_head+str(i+1)+row_port_xpath_tail ip=selector.xpath(ip_xpath)[0] port=selector.xpath(port_xpath)[0] ip_port=ip+':'+port proxy_list.append(ip_port) returnproxy_list #检测代理ip是否可用 deftest_proxy_ip_port(proxy_ip_port): print('当前代理ip:{}'.format(proxy_ip_port)) ip_port=proxy_ip_port.split(':') ip=ip_port[0] port=ip_port[1] #用telnet来验证ip是否可用 try: telnetlib.Telnet(ip,port,timeout=10) except: returnFalse else: returnTrue #把有效的ip写入本地 defwrite_ip(proxy_ip): withopen('./ip.txt','a')asf: f.write(proxy_ip+'\n') #删除文件 defdel_file(): file_path='./ip.txt' ifos.path.exists(file_path): os.remove(file_path) defrun(): del_file() proxy_ip_port_list=[] foriinrange(1,6):#前5页 proxy_ip_port_list+=get_proxy(i) foriinrange(100):#一页有100条 proxy_ip_port=proxy_ip_port_list[i] is_valid=test_proxy_ip_port(proxy_ip_port) print(is_valid) ifis_valid: #写入ip到本地 write_ip(proxy_ip_port) if__name__=='__main__': run()
更多关于Python相关内容可查看本站专题:《PythonSocket编程技巧总结》、《Python正则表达式用法总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》
希望本文所述对大家Python程序设计有所帮助。