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通过PIL获取图片主要颜色并和颜色库进行对比的方法
Mar 19 Python
使用wxPython获取系统剪贴板中的数据的教程
May 06 Python
Python3 queue队列模块详细介绍
Jan 05 Python
Python中getpass模块无回显输入源码解析
Jan 11 Python
Python 爬虫之Beautiful Soup模块使用指南
Jul 05 Python
简单谈谈python基本数据类型
Sep 26 Python
python如何统计代码运行的时长
Jul 24 Python
Python算法中的时间复杂度问题
Nov 19 Python
python打印文件的前几行或最后几行教程
Feb 13 Python
Python之Matplotlib文字与注释的使用方法
Jun 18 Python
Python如何创建装饰器时保留函数元信息
Aug 07 Python
python 如何上传包到pypi
Dec 24 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的ASP防火墙
2006/10/09 PHP
windows下配置php5.5开发环境及开发扩展
2014/12/25 PHP
详解php比较操作符的安全问题
2015/12/03 PHP
PHP开发之归档格式phar文件概念与用法详解【创建,使用,解包还原提取】
2017/11/17 PHP
laravel框架实现敏感词汇过滤功能示例
2020/02/15 PHP
浅析JavaScript中的typeof运算符
2013/11/30 Javascript
基于jquery固定于顶部的导航响应浏览器滚动条事件
2014/11/02 Javascript
jquery zTree异步加载简单实例讲解
2016/02/25 Javascript
Angular.js与Bootstrap相结合实现手风琴菜单代码
2016/04/13 Javascript
深入理解js generator数据类型
2016/08/16 Javascript
jQuery的Read()方法代替原生JS详解
2016/11/08 Javascript
bootstrap3使用bootstrap datetimepicker日期插件
2017/05/24 Javascript
详解使用angularjs的ng-options时如何设置默认值(初始值)
2017/07/18 Javascript
基于匀速运动的实例讲解(侧边栏,淡入淡出)
2017/10/17 Javascript
VUE2.0+Element-UI+Echarts封装的组件实例
2018/03/02 Javascript
vue+php实现的微博留言功能示例
2019/03/16 Javascript
Nginx设置为Node.js的前端服务器方法总结
2019/03/27 Javascript
这样回答继承可能面试官更满意
2019/12/10 Javascript
原生Vue 实现右键菜单组件功能
2019/12/16 Javascript
js实现带搜索功能的下拉框
2020/01/11 Javascript
python使用正则表达式分析网页中的图片并进行替换的方法
2015/03/26 Python
玩转python爬虫之正则表达式
2016/02/17 Python
django将图片上传数据库后在前端显式的方法
2018/05/25 Python
Python 输出详细的异常信息(traceback)方式
2020/04/08 Python
python MD5加密的示例
2020/10/19 Python
科室工作的个人自我评价
2013/10/30 职场文书
共筑中国梦演讲稿
2014/04/23 职场文书
公司爱心捐款倡议书
2014/05/14 职场文书
《爱的教育》读书心得
2014/11/08 职场文书
爱国影片观后感
2015/06/18 职场文书
2016道德模范先进事迹材料
2016/02/26 职场文书
JS监听Esc 键触发事键
2021/04/14 Javascript
Python 如何安装Selenium
2021/05/06 Python
TensorFlow中tf.batch_matmul()的用法
2021/06/02 Python
分享几个简单MySQL优化小妙招
2022/03/31 MySQL
html中两种获取标签内的值的方法
2022/06/16 jQuery