python实现ip代理池功能示例


Posted in Python onJuly 05, 2019

本文实例讲述了python实现ip代理池功能。分享给大家供大家参考,具体如下:

爬取的代理源为西刺代理。

  • 用xpath解析页面
  • 用telnet来验证ip是否可用
  • 把有效的ip写入到本地txt中。当然也可以写入到redis、mongodb中,也可以设置检测程序当代理池中的ip数不够(如:小于20个)时,启动该脚本来重新获取ip,本脚本的代码也要做相应的改变。
# !/usr/bin/env python
# -*- coding: utf-8 -*-
# @Version   : 1.0
# @Time     : 2018/10/23 上午10:40
# @Author    : Yeoman
# @Description :
import urllib.request
import lxml.etree
import telnetlib
import os
headers = {
  'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.67 Safari/537.36'
}
def get_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()'
  for i in range(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)
  return proxy_list
# 检测代理ip是否可用
def test_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:
    return False
  else:
    return True
# 把有效的ip写入本地
def write_ip(proxy_ip):
  with open('./ip.txt', 'a') as f:
    f.write(proxy_ip + '\n')
# 删除文件
def del_file():
  file_path = './ip.txt'
  if os.path.exists(file_path):
    os.remove(file_path)
def run():
  del_file()
  proxy_ip_port_list = []
  for i in range(1, 6): # 前5页
    proxy_ip_port_list += get_proxy(i)
  for i in range(100): # 一页有100条
    proxy_ip_port = proxy_ip_port_list[i]
    is_valid = test_proxy_ip_port(proxy_ip_port)
    print(is_valid)
    if is_valid:
      # 写入ip到本地
      write_ip(proxy_ip_port)
if __name__ == '__main__':
  run()

更多关于Python相关内容可查看本站专题:《Python Socket编程技巧总结》、《Python正则表达式用法总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
python新手经常遇到的17个错误分析
Jul 30 Python
python实现简单的计时器功能函数
Mar 14 Python
在Python中用get()方法获取字典键值的教程
May 21 Python
基于Python __dict__与dir()的区别详解
Oct 30 Python
Python下载网络文本数据到本地内存的四种实现方法示例
Feb 05 Python
django orm 通过related_name反向查询的方法
Dec 15 Python
用Python解决x的n次方问题
Feb 08 Python
基于python实现把图片转换成素描
Nov 13 Python
PyCharm2020.1.2社区版安装,配置及使用教程详解(Windows)
Aug 07 Python
python 利用matplotlib在3D空间中绘制平面的案例
Feb 06 Python
pandas apply使用多列计算生成新的列实现示例
Feb 24 Python
Python卷积神经网络图片分类框架详解分析
Nov 07 Python
解决yum对python依赖版本问题
Jul 05 #Python
python写入文件自动换行问题的方法
Jul 05 #Python
Python Numpy计算各类距离的方法
Jul 05 #Python
ERLANG和PYTHON互通实现过程详解
Jul 05 #Python
python如何读取bin文件并下发串口
Jul 05 #Python
anaconda如何查看并管理python环境
Jul 05 #Python
python笔记之mean()函数实现求取均值的功能代码
Jul 05 #Python
You might like
php中的一个中文字符串截取函数
2007/02/14 PHP
深入探讨:Nginx 502 Bad Gateway错误的解决方法
2013/06/03 PHP
php中替换字符串中的空格为逗号','的方法
2014/06/09 PHP
PHP实现对二维数组某个键排序的方法
2016/09/14 PHP
jquery 得到当前页面高度和宽度的两个函数
2010/02/21 Javascript
JavaScript高级程序设计 客户端存储学习笔记
2011/09/10 Javascript
js 金额格式化来回转换示例
2014/02/23 Javascript
JQuery中使用ajax传输超大数据的解决方法
2014/07/14 Javascript
JQuery中节点遍历方法实例
2015/05/18 Javascript
jQuery解决浏览器兼容性问题案例分析
2016/04/15 Javascript
JQuery Mobile 弹出式登录框的实现方法
2016/05/28 Javascript
JavaScript ES5标准中新增的Array方法
2016/06/28 Javascript
浅谈JS运算符&&和|| 及其优先级
2016/08/10 Javascript
JS实现给对象动态添加属性的方法
2017/01/05 Javascript
jQuery表格的维护和删除操作
2017/02/03 Javascript
微信小程序 setData使用方法及常用错误解决办法
2017/05/11 Javascript
javascript 产生随机数的几种方法总结
2017/09/26 Javascript
npm全局模块卸载及默认安装目录修改方法
2018/05/15 Javascript
Python的加密模块md5、sha、crypt使用实例
2014/09/28 Python
在服务器端实现无间断部署Python应用的教程
2015/04/16 Python
浅析Python的Django框架中的Memcached
2015/07/23 Python
python3+PyQt5实现文档打印功能
2018/04/24 Python
pycharm运行出现ImportError:No module named的解决方法
2018/10/13 Python
Python 继承,重写,super()调用父类方法操作示例
2019/09/29 Python
Python decorator拦截器代码实例解析
2020/04/04 Python
python生成xml时规定dtd实例方法
2020/09/21 Python
python用Configobj模块读取配置文件
2020/09/26 Python
ffmpeg+Python实现B站MP4格式音频与视频的合并示例代码
2020/10/21 Python
Python + opencv对拍照得到的图片进行背景去除的实现方法
2020/11/18 Python
Python 实现PS滤镜中的径向模糊特效
2020/12/03 Python
美国皮靴公司自1863年:The Frye Company
2016/11/30 全球购物
英国排名第一的在线宠物用品商店:Monster Pet Supplies
2018/05/20 全球购物
领先的英国注册在线药房 :Simply Meds Online
2019/03/28 全球购物
应届生体育教师自荐信
2013/10/03 职场文书
简单而又朴实的个人求职信分享
2013/12/12 职场文书
会计工作决心书
2014/03/11 职场文书