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检测服务器是否正常
Feb 16 Python
利用Python绘制MySQL数据图实现数据可视化
Mar 30 Python
Python3实现的简单验证码识别功能示例
May 02 Python
python XlsxWriter模块创建aexcel表格的实例讲解
May 03 Python
解决tensorflow1.x版本加载saver.restore目录报错的问题
Jul 26 Python
Python 单元测试(unittest)的使用小结
Nov 14 Python
基于Python实现迪杰斯特拉和弗洛伊德算法
May 27 Python
创建Django项目图文实例详解
Jun 06 Python
logging level级别介绍
Feb 21 Python
Pycharm内置终端及远程SSH工具的使用教程图文详解
Mar 19 Python
正确的理解和使用Django信号(Signals)
Apr 14 Python
python opencv将多个图放在一个窗口的实例详解
Feb 28 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中实现使用Guzzle执行POST和GET请求
2019/10/15 PHP
在视频前插入广告
2006/11/20 Javascript
在页面上点击任一链接时触发一个事件的代码
2007/04/07 Javascript
jQuery 全选效果实现代码
2009/03/23 Javascript
jquery中对表单的基本操作代码
2010/07/29 Javascript
改变文件域的样式实现思路同时兼容ie、firefox
2013/10/23 Javascript
js函数名与form表单元素同名冲突的问题
2014/03/07 Javascript
jQuery类选择器用法实例
2014/12/23 Javascript
jQuery动态效果显示人物结构关系图的方法
2015/05/07 Javascript
jQuery实现仿美橙互联两级导航菜单效果完整实例
2015/09/17 Javascript
利用纯js + transition动画实现移动端web轮播图详解
2017/09/10 Javascript
jQuery实现的两种简单弹窗效果示例
2018/04/18 jQuery
async/await优雅的错误处理方法总结
2019/01/30 Javascript
深入浅析Vue中mixin和extend的区别和使用场景
2019/08/01 Javascript
Vue基础配置讲解
2019/11/29 Javascript
Webpack中SplitChunksPlugin 配置参数详解
2020/03/24 Javascript
python解析中国天气网的天气数据
2014/03/21 Python
Python中使用Tkinter模块创建GUI程序实例
2015/01/14 Python
Python中操作符重载用法分析
2016/04/29 Python
Python获取本机所有网卡ip,掩码和广播地址实例代码
2018/01/22 Python
python 读取修改pcap包的例子
2019/07/23 Python
使用Python自动生成HTML的方法示例
2019/08/06 Python
python中的RSA加密与解密实例解析
2019/11/18 Python
python 实现turtle画图并导出图片格式的文件
2019/12/07 Python
pytorch 中forward 的用法与解释说明
2021/02/26 Python
简单介绍CSS3中Media Query的使用
2015/07/07 HTML / CSS
html5给汉字加拼音加进度条的实现代码
2020/04/07 HTML / CSS
英国手工制作的现代与经典的沙发和床:Love Your Home
2020/09/26 全球购物
跟单文员的岗位职责
2013/11/14 职场文书
公司年会演讲稿范文
2014/01/11 职场文书
不遵守课堂纪律的检讨书
2014/09/24 职场文书
关于运动会广播稿50字
2014/10/18 职场文书
css3实现背景图片半透明内容不透明的方法示例
2021/04/13 HTML / CSS
再谈python_tkinter弹出对话框创建
2022/03/20 Python
【海涛教你打DOTA】剑圣第一人称视角解说
2022/04/01 DOTA
解决Windows Server2012 R2 无法安装 .NET Framework 3.5
2022/04/29 Servers