python获取代理IP的实例分享


Posted in Python onMay 07, 2018

平时当我们需要爬取一些我们需要的数据时,总是有些网站禁止同一IP重复访问,这时候我们就应该使用代理IP,每次访问前伪装自己,让“敌人”无法察觉。

oooooooooooooooOK,让我们愉快的开始吧!

这个是获取代理ip的文件,我将它们模块化,分为三个函数

注:文中会有些英文注释,是为了写代码方便,毕竟英文一两个单词就ok了

#!/usr/bin/python
#-*- coding:utf-8 -*-
"""
author:dasuda
"""
import urllib2
import re
import socket
import threading
findIP = [] #获取的原始IP数据
IP_data = [] #拼接端口后的IP数据
IP_data_checked = [] #检查可用性后的IP数据
findPORT = [] #IP对应的端口
available_table = [] #可用IP的索引
def getIP(url_target):
 patternIP = re.compile(r'(?<=<td>)[\d]{1,3}\.[\d]{1,3}\.[\d]{1,3}\.[\d]{1,3}')
 patternPORT = re.compile(r'(?<=<td>)[\d]{2,5}(?=</td>)')
 print "now,start to refresh proxy IP..."
 for page in range(1,4):
  url = 'http://www.xicidaili.com/nn/'+str(page)
  headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64)"}
  request = urllib2.Request(url=url, headers=headers)
  response = urllib2.urlopen(request)
  content = response.read()
  findIP = re.findall(patternIP,str(content))
  findPORT = re.findall(patternPORT,str(content))
  #assemble the ip and port
  for i in range(len(findIP)):
   findIP[i] = findIP[i] + ":" + findPORT[i]
   IP_data.extend(findIP)
  print('get page', page)
 print "refresh done!!!"
 #use multithreading
 mul_thread_check(url_target)
 return IP_data_checked
def check_one(url_check,i):
 #get lock
 lock = threading.Lock()
 #setting timeout
 socket.setdefaulttimeout(8)
 try:
  ppp = {"http":IP_data[i]}
  proxy_support = urllib2.ProxyHandler(ppp)
  openercheck = urllib2.build_opener(proxy_support)
  urllib2.install_opener(openercheck)
  request = urllib2.Request(url_check)
  request.add_header('User-Agent',"Mozilla/5.0 (Windows NT 10.0; WOW64)")
  html = urllib2.urlopen(request).read()
  lock.acquire()
  print(IP_data[i],'is OK')
  #get available ip index
  available_table.append(i)
  lock.release()
 except Exception as e:
  lock.acquire()
  print('error')
  lock.release()
def mul_thread_check(url_mul_check):
 threads = []
 for i in range(len(IP_data)):
  #creat thread...
  thread = threading.Thread(target=check_one, args=[url_mul_check,i,])
  threads.append(thread)
  thread.start()
  print "new thread start",i
 for thread in threads:
  thread.join()
 #get the IP_data_checked[]
 for error_cnt in range(len(available_table)):
  aseemble_ip = {'http': IP_data[available_table[error_cnt]]}
  IP_data_checked.append(aseemble_ip)
 print "available proxy ip:",len(available_table)

一、getIP(url_target):主要函数 传入参数是:验证代理IP可用性的网址,推荐ipchina

获取代理IP,从http://www.xicidaili.com/nn/网站获取,它是一个提供免费代理IP的网站,但是里面的IP不是全都能用,而且结合你的实际地理位置、网络情况、访问的目标服务器等情况,能用的大概不到20%,至少我的情况是这样。

访问http://www.xicidaili.com/nn/网站使用正常方式,返回的网页内容通过正则查询获得需要的IP和对应端口,代码如下:

patternIP = re.compile(r'(?<=<td>)[\d]{1,3}\.[\d]{1,3}\.[\d]{1,3}\.[\d]{1,3}')
patternPORT = re.compile(r'(?<=<td>)[\d]{2,5}(?=</td>)')
...
findIP = re.findall(patternIP,str(content))
findPORT = re.findall(patternPORT,str(content))

关于如何构造正则表达式,可以参考其他的文章:

获取的IP保存在findIP中,对应的端口在findPORT中,两者按索引对应,获取一页IP正常数量为100.

接下来进行IP和端口拼接

最后进行可用性检查

二、check_one(url_check,i):线程函数

本次访问url_check还是使用正常方式访问,当访问网页有返回时,则说明本代理IP可用,则记录下当前索引值,用于后面将所有可用IP取出。

三、mul_thread_check(url_mul_check):多线程生成

本函数开启多线程检查代理IP可用性,每个IP开启一个线程进行检查。

本工程直接调用getIP(),并传入用于检查可用性的网址,即可返回一个列表,里面是经可用性检查的ip列表,格式为

['ip1:port1','ip2:port2',....]

以上这篇python获取代理IP的实例分享就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
一个计算身份证号码校验位的Python小程序
Aug 15 Python
Python原始字符串(raw strings)用法实例
Oct 13 Python
详解在Python和IPython中使用Docker
Apr 28 Python
Python实现针对含中文字符串的截取功能示例
Sep 22 Python
python3获取当前文件的上一级目录实例
Apr 26 Python
python 高效去重复 支持GB级别大文件的示例代码
Nov 08 Python
python 字符串常用函数详解
Sep 11 Python
Python 实现将数组/矩阵转换成Image类
Jan 09 Python
Python模拟FTP文件服务器的操作方法
Feb 18 Python
彻底搞懂 python 中文乱码问题(深入分析)
Feb 28 Python
Python应用实现处理excel数据过程解析
Jun 19 Python
python中添加模块导入路径的方法
Feb 03 Python
对python使用http、https代理的实例讲解
May 07 #Python
python3 requests中使用ip代理池随机生成ip的实例
May 07 #Python
python使用代理ip访问网站的实例
May 07 #Python
一些Centos Python 生产环境的部署命令(推荐)
May 07 #Python
Python实现爬虫设置代理IP和伪装成浏览器的方法分享
May 07 #Python
Pyspider中给爬虫伪造随机请求头的实例
May 07 #Python
python通过伪装头部数据抵抗反爬虫的实例
May 07 #Python
You might like
PHP通用分页类page.php[仿google分页]
2008/08/31 PHP
php实现网站留言板功能
2015/11/04 PHP
js 日期转换成中文格式的函数
2009/07/07 Javascript
js或css实现滚动广告的几种方案
2010/01/28 Javascript
深入理解JavaScript系列(1) 编写高质量JavaScript代码的基本要点
2012/01/15 Javascript
jQuery实现视频作为全屏幕背景
2014/12/18 Javascript
JavaScript模拟鼠标右键菜单效果
2020/12/08 Javascript
ion content 滚动到底部会遮住一部分视图的快速解决方法
2016/09/06 Javascript
jQuery实现花式轮播之圣诞节礼物传送效果
2016/12/25 Javascript
jQuery EasyUi 验证功能实例解析
2017/01/06 Javascript
JavaScript原生节点操作小结
2017/01/17 Javascript
Vue.js 2.0学习教程之从基础到组件详解
2017/04/24 Javascript
微信小程序组件 marquee实例详解
2017/06/23 Javascript
BootstrapTable加载按钮功能实例代码详解
2017/09/22 Javascript
微信小程序当前时间时段选择器插件使用方法详解
2018/12/28 Javascript
教你使用vue-cli快速构建的小说阅读器
2019/05/13 Javascript
jQuery表单选择器用法详解
2019/08/22 jQuery
微信小程序实现星星评分效果
2020/11/01 Javascript
[01:51]2014DOTA2西雅图邀请赛 MVP 外卡赛black场间采访
2014/07/09 DOTA
Python判断变量是否为Json格式的字符串示例
2017/05/03 Python
idea创建springMVC框架和配置小文件的教程图解
2018/09/18 Python
python实现从文件中读取数据并绘制成 x y 轴图形的方法
2018/10/14 Python
python实现程序重启和系统重启方式
2020/04/16 Python
python实现逢七拍腿小游戏的思路详解
2020/05/26 Python
美国钻石商店:Zales
2016/11/20 全球购物
Intersport西班牙:在线体育商店
2019/11/06 全球购物
Muziker英国:中欧最大的音乐家商店
2020/02/05 全球购物
教师节商场活动方案
2014/02/13 职场文书
解除劳动合同协议书
2014/04/14 职场文书
体育活动总结范文
2014/05/04 职场文书
医院深入开展党的群众路线教育实践活动实施方案
2014/08/27 职场文书
党组织结对共建协议书
2016/03/23 职场文书
导游词之杭州西湖
2019/09/19 职场文书
写好Python代码的几条重要技巧
2021/05/21 Python
Vite + React从零开始搭建一个开源组件库
2022/06/25 Javascript
React更新渲染原理深入分析
2022/12/24 Javascript