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中使用md5sum检查目录中相同文件代码分享
Feb 02 Python
Python装饰器实现几类验证功能做法实例
May 18 Python
Python编程实战之Oracle数据库操作示例
Jun 21 Python
Python编程之string相关操作实例详解
Jul 22 Python
Python实用技巧之利用元组代替字典并为元组元素命名
Jul 11 Python
使用Pyinstaller转换.py文件为.exe可执行程序过程详解
Aug 06 Python
python实现证件照换底功能
Aug 20 Python
python调用matplotlib模块绘制柱状图
Oct 18 Python
Python性能分析工具Profile使用实例
Nov 19 Python
使用PyTorch将文件夹下的图片分为训练集和验证集实例
Jan 08 Python
【超详细】八大排序算法的各项比较以及各自特点
Mar 31 Python
python读取mnist数据集方法案例详解
Sep 04 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程序的多种方法介绍
2014/11/06 PHP
四个常见html网页乱码问题及解决办法
2015/09/08 PHP
php+ajax实现无刷新数据分页的办法
2015/11/02 PHP
laravel 之 Eloquent 模型修改器和序列化示例
2019/10/17 PHP
jquery checkbox,radio是否选中的判断代码
2010/03/20 Javascript
javascript setTimeout()传递函数参数(包括传递对象参数)
2010/04/07 Javascript
新手常遇到的一些jquery问题整理
2010/08/16 Javascript
关于锚点跳转及jQuery下相关操作与插件
2012/10/01 Javascript
JQuery实现当鼠标停留在某区域3秒后自动执行
2014/09/09 Javascript
如何用jQuery实现ASP.NET GridView折叠伸展效果
2015/09/26 Javascript
AngularJS  双向数据绑定详解简单实例
2016/10/20 Javascript
javascript鼠标跟随运动3种效果(眼球效果,苹果菜单,方向跟随)
2016/10/27 Javascript
jQuery实现的简单无刷新评论功能示例
2017/11/08 jQuery
解决Vue+Element ui开发中碰到的IE问题
2018/09/03 Javascript
vue组件系列之TagsInput详解
2020/05/14 Javascript
Node.js API详解之 readline模块用法详解
2020/05/22 Javascript
addEventListener()和removeEventListener()追加事件和删除追加事件
2020/12/04 Javascript
用Python的线程来解决生产者消费问题的示例
2015/04/02 Python
Python中函数的多种格式和使用实例及小技巧
2015/04/13 Python
Python中collections模块的基本使用教程
2018/12/07 Python
用Python徒手撸一个股票回测框架搭建【推荐】
2019/08/05 Python
详解Python Matplotlib解决绘图X轴值不按数组排序问题
2019/08/05 Python
python 直接赋值和copy的区别详解
2019/08/07 Python
Python 使用指定的网卡发送HTTP请求的实例
2019/08/21 Python
python 实现简易的记事本
2020/11/30 Python
用python制作个音乐下载器
2021/01/30 Python
日本一家专门经营各种箱包的大型网站:Traveler Store
2016/08/03 全球购物
次世代生活态度:Hypebeast
2018/07/05 全球购物
Bailey帽子官方商店:Bailey Hats
2018/09/25 全球购物
工艺工程师岗位职责
2014/03/04 职场文书
房地产财务部员工岗位职责
2014/03/12 职场文书
成龙洗发水广告词
2014/03/14 职场文书
区长工作作风个人整改措施
2014/10/01 职场文书
《检阅》教学反思
2016/02/22 职场文书
python如何做代码性能分析
2021/04/26 Python
Python 实现绘制子图及子图刻度的变换等问题
2021/05/31 Python