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生成文件md5校验值函数的方法
Jan 10 Python
Python 移动光标位置的方法
Jan 20 Python
浅析pandas 数据结构中的DataFrame
Oct 12 Python
Python代码块及缓存机制原理详解
Dec 13 Python
Python3 利用face_recognition实现人脸识别的方法
Mar 13 Python
Python定义函数实现累计求和操作
May 03 Python
python opencv角点检测连线功能的实现代码
Nov 24 Python
Python更改pip镜像源的方法示例
Dec 01 Python
Python 排序最长英文单词链(列表中前一个单词末字母是下一个单词的首字母)
Dec 14 Python
python中str内置函数用法总结
Dec 27 Python
一文读懂python Scrapy爬虫框架
Feb 24 Python
利用Selenium添加cookie实现自动登录的示例代码(fofa)
May 08 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的FTP学习(三)
2006/10/09 PHP
解析thinkphp的左右值无限分类
2013/06/20 PHP
PHP+MySQL之Insert Into数据插入用法分析
2015/09/27 PHP
php lcg_value与mt_rand生成0~1随机小数的效果对比分析
2017/04/05 PHP
Laravel框架实现超简单的分页效果示例
2019/02/08 PHP
PHP 自动加载类原理与用法实例分析
2020/04/14 PHP
javascript动态添加表格数据行(ASP后台数据库保存例子)
2010/05/08 Javascript
jquery插件制作 表单验证实现代码
2012/08/17 Javascript
解析瀑布流布局:JS+绝对定位的实现
2013/05/08 Javascript
js判断运行jsp页面的浏览器类型以及版本示例
2013/10/30 Javascript
简单的jQuery入门指引
2015/07/28 Javascript
jQuery动态移除和添加背景图片的方法详解
2017/03/07 Javascript
JS 组件系列之 bootstrap treegrid 组件封装过程
2017/04/28 Javascript
详解webpack-dev-server使用http-proxy解决跨域问题
2018/01/13 Javascript
实例详解Node.js 函数
2018/06/10 Javascript
vue解决弹出蒙层滑动穿透问题的方法
2018/09/22 Javascript
vue插件draggable实现拖拽移动图片顺序
2018/12/01 Javascript
JavaScript实现美化滑块效果
2019/05/17 Javascript
ES6 Array常用扩展的应用实例分析
2019/06/26 Javascript
jquery html添加元素/删除元素操作实例详解
2020/05/20 jQuery
django admin 后台实现三级联动的示例代码
2018/06/22 Python
python使用turtle库绘制树
2018/06/25 Python
python读取txt文件并取其某一列数据的示例
2019/02/19 Python
Python中拆分字符串的操作方法
2019/07/23 Python
python-numpy-指数分布实例详解
2019/12/07 Python
Python跑循环时内存泄露的解决方法
2020/01/13 Python
基于Python正确读取资源文件
2020/09/14 Python
HTML5实现QQ聊天气泡效果
2017/06/26 HTML / CSS
详解HTML5 Canvas绘制时指定颜色与透明度的方法
2016/03/25 HTML / CSS
Ryderwear澳洲官网:澳大利亚高端健身训练装备品牌
2018/09/18 全球购物
我的珠宝盒:Ma boîte à bijoux
2019/08/27 全球购物
办公室保洁员岗位职责
2013/12/02 职场文书
三年级数学教学反思
2014/01/31 职场文书
2014年教师批评与自我批评思想汇报
2014/09/20 职场文书
专业技术职务聘任证明
2015/03/02 职场文书
留学推荐信英文范文
2015/03/26 职场文书