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分布式环境下的限流器的示例
Oct 26 Python
python中单例常用的几种实现方法总结
Oct 13 Python
python 同时运行多个程序的实例
Jan 07 Python
Python中print和return的作用及区别解析
May 05 Python
python opencv摄像头的简单应用
Jun 06 Python
Python 批量刷博客园访问量脚本过程解析
Aug 30 Python
python 如何将数据写入本地txt文本文件的实现方法
Sep 11 Python
python实现的config文件读写功能示例
Sep 24 Python
python动态规划算法实例详解
Nov 22 Python
python工具快速为音视频自动生成字幕(使用说明)
Jan 27 Python
python中添加模块导入路径的方法
Feb 03 Python
pytorch训练神经网络爆内存的解决方案
May 22 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
支持oicq头像的留言簿(二)
2006/10/09 PHP
投票管理程序
2006/10/09 PHP
php+js实现图片的上传、裁剪、预览、提交示例
2013/08/27 PHP
destoon二次开发常用数据库操作
2014/06/21 PHP
php使用正则表达式去掉html中的注释方法
2016/11/03 PHP
php事务回滚简单实现方法示例
2017/03/28 PHP
PHP设计模式之外观模式(Facade)入门与应用详解
2019/12/13 PHP
PHP实现本地图片转base64格式并上传
2020/05/29 PHP
自己编写的支持Ajax验证的JS表单验证插件
2015/05/15 Javascript
jquery实现select选择框内容左右移动代码分享
2015/11/21 Javascript
莱鸟介绍window.print()方法
2016/01/06 Javascript
JavaScript知识点总结(四)之逻辑OR运算符详解
2016/05/31 Javascript
AngularJS入门教程之表格实例详解
2016/07/27 Javascript
Windows环境下npm install 报错: operation not permitted, rename的解决方法
2016/09/26 Javascript
JavaScript实现的CRC32函数示例
2016/11/23 Javascript
JS实现微信弹出搜索框 多条件查询功能
2016/12/13 Javascript
微信小程序 实战程序简易新闻的制作
2017/01/09 Javascript
Bootstrap 网格系统布局详解
2017/03/19 Javascript
Bootstrap弹出框之自定义悬停框标题、内容和样式示例代码
2017/07/11 Javascript
基于VuePress 轻量级静态网站生成器的实现方法
2018/04/17 Javascript
vue 2.5.1 源码学习 之Vue.extend 和 data的合并策略
2019/06/04 Javascript
layui上传图片到服务器的非项目目录下的方法
2019/09/26 Javascript
Vuex的实战使用详解
2019/10/31 Javascript
微信小程序语音同步智能识别的实现案例代码解析
2020/05/29 Javascript
[51:17]完美世界DOTA2联赛循环赛Inki vs DeMonsTer 第二场 10月30日
2020/10/31 DOTA
python中getattr函数使用方法 getattr实现工厂模式
2014/01/20 Python
Python字符串逐字符或逐词反转方法
2015/05/21 Python
python实现事件驱动
2018/11/21 Python
Python设计模式之代理模式实例详解
2019/01/19 Python
PyQt5 实现字体大小自适应分辨率的方法
2019/06/18 Python
简单了解python协程的相关知识
2019/08/31 Python
python实现小世界网络生成
2019/11/21 Python
意大利辅助药品、药物和补品在线销售:FarmaEurope
2020/04/29 全球购物
施工安全生产承诺书
2014/05/23 职场文书
功夫熊猫观后感
2015/06/10 职场文书
关于观后感的作文
2015/06/18 职场文书