为获取网上免费代理IP,闲的无聊,整合了一下,免费从三个代理网站获取免费代理IP,目的是在某一代理网站被限制时,仍可从可以访问的其他网站上获取代理IP。亲测可用哦!^_^  仅供大家参考,以下脚本可添加函数,用于代理IP自动访问其他东西。

 import requests
import urllib.request
from bs4 import BeautifulSoup
import random,time,re
import random
from urllib.request import FancyURLopener IPRegular = r"(([1-9]?\d|1\d{2}|2[0-4]\d|25[0-5]).){3}([1-9]?\d|1\d{2}|2[0-4]\d|25[0-5])"
headers = {'User-Agent', 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36'}
header1 = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) ''AppleWebKit/537.36 (KHTML, like Gecko) ''Ubuntu Chromium/44.0.2403.89 '
'Chrome/44.0.2403.89 ''Safari/537.36'}
# 定义用于存放IP的列表
IPs = []
proxy_list = [] #代理一:
def getIPList1():
for i in range(1, 3):
req = urllib.request.Request(url='http://www.xicidaili.com/nt/{0}'.format(i), headers=header1)
r = urllib.request.urlopen(req)
soup = BeautifulSoup(r,'html.parser',from_encoding='utf-8')
table = soup.find('table', attrs={'id': 'ip_list'})
tr = table.find_all('tr')[1:]
#解析得到代理ip的地址,端口,和类型
for item in tr:
tds = item.find_all('td')
temp_dict = {}
kind = "{0}:{1}".format(tds[1].get_text().lower(), tds[2].get_text())
proxy_list.append(kind)
return proxy_list #代理二:
def getIPList2():
# 代理网站的地址的格式
# 根据观察url,发现各省的代理IP页面由数字控制
# 所以我们先用占位符{}代替这个数字的位置
url = 'http://www.66ip.cn/areaindex_16/{}.html'
for page in range(10):
# 先填占位符生成一个省的url
url = url.format(page)
# get()方法访问,得到一个Response对象
rsp = requests.get(url)
# Response对象的text属性得到源码
text = rsp.text
# 用BeautifulSoup()方法将源码生成能被解析的lxml格式文件
soup = BeautifulSoup(text, 'lxml')
# 用find()找放置IP的表
table = soup.find(name='table', attrs={'border': '2px'})
# 用find_all()找到所以的IP
ip_list = table.find_all(name='tr')
# 循环遍历每个IP
for addr in ip_list:
# 观察源码发现第一个tr里的内容不是IP,所以跳过
if addr == ip_list[0]:
continue
# 获取IP
ip = addr.find_all(name='td')[0].string
# 获取端口
port = addr.find_all(name='td')[1].string
proxy = '%s:%s' % (ip, port)
proxy_list.append(proxy)
return proxy_list #代理三:
def getIPList3():
request_list = []
headers = {
'Host': 'www.iphai.com',
'User-Agent': 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)',
'Accept': r'application/json, text/javascript, */*; q=0.01',
'Referer': r'http://www.iphai.com',}
request_item = "http://www.iphai.com/free/ng"
request_list.append(request_item)
for req_id in request_list:
req = urllib.request.Request(req_id, headers=headers)
response = urllib.request.urlopen(req)
html = response.read().decode('utf-8') ip_list = re.findall(r'\d+\.\d+\.\d+\.\d+', html)
port_list = re.findall(r'(\s\d+\s)', html)
for i in range(len(ip_list)):
#total_count += 1
ip = ip_list[i]
port = re.sub(r'(^\s*)|(\s*$)/g','',port_list[i])
proxy = '%s:%s' % (ip, port)
proxy_list.append(proxy)
return proxy_list if __name__ == "__main__":
#选择可以访问的代理
list1 = ['http://www.66ip.cn/','https://www.xicidaili.com','http://www.iphai.com/free/ng']
while 1==1:
for url in list1:
try:
r = requests.get(url, timeout=5,headers=header1)
if r.status_code == 200:
if url == list1[0]:
print ("OK 网站访问正常", url)
IPs = getIPList2()
elif url == list1[1]:
print ("OK 网站访问正常", url)
IPs = getIPList1()
elif url == list1[2]:
print ("OK 网站访问正常", url)
IPs = getIPList3()
break
except :
print ("Error 不能访问!", url)
break
print("获取的代理IP为:",IPs)
time.sleep(10)

Python学习笔记六(免费获取代理IP)的更多相关文章

  1. 【Python学习笔记六】获取百度搜索结果以及百度返回“百度安全验证”问题解决

    1.获取百度搜索结果页面主要是修改百度搜索url中的参数实现,例如查询的关键字为wd: 举例:https://www.baidu.com/s?wd=python",这样就可以查询到‘pyth ...

  2. 20180821 Python学习笔记:如何获取当前程序路径

    20180821 Python学习笔记:如何获取当前程序路径 启动的脚本的路径为:D:\WORK\gitbase\ShenzhenHouseInfoCrawler\main.py 当前脚本的路径为:D ...

  3. Python学习笔记六

    Python课堂笔记六 常用模块已经可以在单位实际项目中使用,可以实现运维自动化.无需手工备份文件,数据库,拷贝,压缩. 常用模块 time模块 time.time time.localtime ti ...

  4. python学习笔记六 面向对象相关下(基础篇)

    面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使用(可以将多函数中公用的变量封装到对象中) 对象,根据模板创建的 ...

  5. 【Python学习笔记四】获取html内容之后,如何提取信息:使用正则表达式筛选

    在能够获取到网页内容之后,发现内容很多,那么下一步要做信息的筛选,就和之前的筛选图片那样 而在python中可以通过正则表达式去筛选自己想要的数据 1.首先分析页面内容信息,确定正则表达式.例如想获取 ...

  6. python学习笔记六 初识面向对象上(基础篇)

    python面向对象   面向对象编程(Object-Oriented Programming )介绍   对于编程语言的初学者来讲,OOP不是一个很容易理解的编程方式,虽然大家都知道OOP的三大特性 ...

  7. python学习笔记(六)、类

    Python与java.c++等都被视为一种面向对象的语言.通过创建自定义类,用于处理各种业务逻辑.面向对象有封装.继承.多态三个特征,这也是面子对象语言的通用特征. 1 封装 封装,是值向外部隐藏内 ...

  8. Python学习笔记六:数据库操作

    一:Python操作数据库的流程 二:开发环境准备 1:开发工具PyCharm 2:Python操作mysql的工具:需要安装Python-Mysql Connector,网址:https://sou ...

  9. python学习笔记(六):常用模块

    一.模块.包 什么是模块? 模块实质上就是一个python文件,它是用来组织代码的,意思就是说把python代码写到里面,文件名就是模块的名称,test.py test就是模块名称. 什么是包? 包, ...

随机推荐

  1. BZOJ 1191: [HNOI2006]超级英雄Hero(二分图匹配)

    1191: [HNOI2006]超级英雄Hero Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 6263  Solved: 2799[Submit][ ...

  2. Java并发编程系列-(4) 显式锁与AQS

    4 显示锁和AQS 4.1 Lock接口 核心方法 Java在java.util.concurrent.locks包中提供了一系列的显示锁类,其中最基础的就是Lock接口,该接口提供了几个常见的锁相关 ...

  3. bash单引号嵌套

    转自:https://blog.jysoftware.com/2015/12/bash-%E6%80%8E%E4%B9%88%E5%81%9A%E5%8D%95%E5%BC%95%E5%8F%B7%E ...

  4. 《项目实战》从Spring开始说起

    引导 从今天开始,我们正式进入项目实战系列,我们会从项目架构的搭建,以及如何解决三高问题(高并发.高可用.高性能),源码会同步进行更新,欢迎大家持续关注 https://gitee.com/liupa ...

  5. CSS3(2)--- 过渡(transition)

    CSS3(2)--- 过渡(transition) 一.概念 1.什么是过渡 通俗理解 是从一个状态 渐渐的过渡到 另外一个状态. 比如一个盒子原先宽度为100px,当鼠标点击时盒子的宽度变成200p ...

  6. Asp.Net WebApi一个简单的Token验证

    1.前言: WebAPI主要开放数据给手机APP,Pad,其他需要得知数据的系统,或者软件应用.Web 用户的身份验证,及页面操作权限验证是B/S系统的基础功能.我上次写的<Asp.Net MV ...

  7. Vue如何实现数据响应的

    参考博客:https://medium.com/vue-mastery/the-best-explanation-of-javascript-reactivity-fea6112dd80d 翻译博客: ...

  8. webpack 环境搭建

    Webpack环境搭建 一.安装node 1.node官网下载node并安装----node里面内置了npm所以用在安装npm了 2.命令行输入node -v查看node是否安装成功 二.全局安装we ...

  9. JAVA可视化闹钟源码

    概述 一些同学的Java课设有这样一个问题,比较感兴趣就做了一下 功能介绍: 1.可增加闹钟 2.可删除闹钟 3.时间到了响铃 4.关闭闹钟不会丢失闹钟(因为闹钟存储在txt文件中,不会因程序关闭就终 ...

  10. NodeJS4-3静态资源服务器实战_优化成近似同步写法

    实例3 上面有点回调,优化成近似同步的写法 route.js const fs =require('fs') const promisify = require('util').promisify; ...