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 相关文章推荐
Linux中Python 环境软件包安装步骤
Mar 31 Python
python3 与python2 异常处理的区别与联系
Jun 19 Python
Python中的上下文管理器和with语句的使用
Apr 17 Python
Python中.join()和os.path.join()两个函数的用法详解
Jun 11 Python
利用python-pypcap抓取带VLAN标签的数据包方法
Jul 23 Python
Python利用逻辑回归分类实现模板
Feb 15 Python
python3中sys.argv的实例用法
Apr 24 Python
使用PyWeChatSpy自动回复微信拍一拍功能的实现代码
Jul 02 Python
PyCharm vs VSCode,作为python开发者,你更倾向哪种IDE呢?
Aug 17 Python
python 服务器运行代码报错ModuleNotFoundError的解决办法
Sep 16 Python
Python基于callable函数检测对象是否可被调用
Oct 16 Python
Python实现拼音转换
Jun 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 定界符 使用技巧
2009/06/14 PHP
eaglephp使用微信api接口开发微信框架
2014/01/09 PHP
PHP格式化MYSQL返回float类型的方法
2016/03/30 PHP
详解PHP神奇又有用的Trait
2019/03/25 PHP
PHP实现简单登录界面
2019/10/23 PHP
php 下 html5 XHR2 + FormData + File API 上传文件操作实例分析
2020/02/28 PHP
Ext grid 添加右击菜单
2009/11/26 Javascript
基于jQuery的倒计时插件代码
2011/05/07 Javascript
JavaScript 放大镜 放大倍率和视窗尺寸
2011/05/09 Javascript
Javascript实现DIV滚动自动滚动到底部的代码
2012/03/01 Javascript
Javascript玩转继承(三)
2014/05/08 Javascript
JavaScript截断字符串的方法
2015/07/15 Javascript
JavaScript入门系列之知识点总结
2016/03/24 Javascript
浅谈js内置对象Math的属性和方法(推荐)
2016/09/19 Javascript
JS控制div跳转到指定的位置的几种解决方案总结
2016/11/05 Javascript
Angularjs自定义指令实现分页插件(DEMO)
2017/09/16 Javascript
JS实现的按钮点击颜色切换功能示例
2017/10/19 Javascript
JS弹窗 JS弹出DIV并使整个页面背景变暗功能的实现代码
2018/04/21 Javascript
如何利用ES6进行Promise封装总结
2019/02/11 Javascript
微信小程序按顺序同步执行的两种方式
2019/12/20 Javascript
Vue 实现监听窗口关闭事件,并在窗口关闭前发送请求
2020/09/01 Javascript
python实现生命游戏的示例代码(Game of Life)
2018/01/24 Python
如何用python整理附件
2018/05/13 Python
详解Pandas之容易让人混淆的行选择和列选择
2019/07/10 Python
PyCharm 无法 import pandas 程序卡住的解决方式
2020/03/09 Python
澳大利亚领先的在线葡萄酒零售商:Get Wines Direct
2018/03/27 全球购物
函授本科毕业生自我鉴定
2013/10/16 职场文书
大学生最常用的自我评价
2013/12/07 职场文书
成绩单家长评语大全
2014/04/16 职场文书
给校长的建议书200字
2014/05/16 职场文书
党员志愿者活动方案
2014/08/28 职场文书
2014幼儿园小班工作总结
2014/11/10 职场文书
模范教师材料大全
2014/12/16 职场文书
维稳承诺书
2015/01/20 职场文书
劳动模范获奖感言
2015/07/31 职场文书
NASA 机智号火星直升机拍到了毅力号设备碎片
2022/04/29 数码科技