Python学习笔记六(免费获取代理IP)
为获取网上免费代理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)的更多相关文章
- 【Python学习笔记六】获取百度搜索结果以及百度返回“百度安全验证”问题解决
1.获取百度搜索结果页面主要是修改百度搜索url中的参数实现,例如查询的关键字为wd: 举例:https://www.baidu.com/s?wd=python",这样就可以查询到‘pyth ...
- 20180821 Python学习笔记:如何获取当前程序路径
20180821 Python学习笔记:如何获取当前程序路径 启动的脚本的路径为:D:\WORK\gitbase\ShenzhenHouseInfoCrawler\main.py 当前脚本的路径为:D ...
- Python学习笔记六
Python课堂笔记六 常用模块已经可以在单位实际项目中使用,可以实现运维自动化.无需手工备份文件,数据库,拷贝,压缩. 常用模块 time模块 time.time time.localtime ti ...
- python学习笔记六 面向对象相关下(基础篇)
面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使用(可以将多函数中公用的变量封装到对象中) 对象,根据模板创建的 ...
- 【Python学习笔记四】获取html内容之后,如何提取信息:使用正则表达式筛选
在能够获取到网页内容之后,发现内容很多,那么下一步要做信息的筛选,就和之前的筛选图片那样 而在python中可以通过正则表达式去筛选自己想要的数据 1.首先分析页面内容信息,确定正则表达式.例如想获取 ...
- python学习笔记六 初识面向对象上(基础篇)
python面向对象 面向对象编程(Object-Oriented Programming )介绍 对于编程语言的初学者来讲,OOP不是一个很容易理解的编程方式,虽然大家都知道OOP的三大特性 ...
- python学习笔记(六)、类
Python与java.c++等都被视为一种面向对象的语言.通过创建自定义类,用于处理各种业务逻辑.面向对象有封装.继承.多态三个特征,这也是面子对象语言的通用特征. 1 封装 封装,是值向外部隐藏内 ...
- Python学习笔记六:数据库操作
一:Python操作数据库的流程 二:开发环境准备 1:开发工具PyCharm 2:Python操作mysql的工具:需要安装Python-Mysql Connector,网址:https://sou ...
- python学习笔记(六):常用模块
一.模块.包 什么是模块? 模块实质上就是一个python文件,它是用来组织代码的,意思就是说把python代码写到里面,文件名就是模块的名称,test.py test就是模块名称. 什么是包? 包, ...
随机推荐
- BZOJ2809 dispatching(左偏树)
在一个忍者的帮派里,一些忍者们被选中派遣给顾客,然后依据自己的工作获取报偿.在这个帮派里,有一名忍者被称之为 Master.除了 Master以外,每名忍者都有且仅有一个上级.为保密,同时增强忍者们的 ...
- 模电&数电知识整理(不定期更新)
模电总复习之爱课堂题目概念整理 Chapter 1 1) 设室温情况下某二极管的反偏电压绝对值为1V,则当其反偏电压值减少100mV时,反向电流的变化是基本不发生变化. 2) 二极管发生击穿后,在击穿 ...
- 使用stm32开发 USB_CAN 适配器测试
USB_CAN 适配器测试例程 采用CDC透传模式 一.简介 CAN总线无处不在,在设计开发中,到处需要用到CAN总线调试工具,本工具可以作为CAN的基础测试工具,用于监听CAN总线,或测试CAN数据 ...
- Django异步任务线程池
当数据库数据量很大时(百万级),许多批量数据修改请求的响应会非常慢,一些不需要即时响应的任务可以放到后台的异步线程中完成,发起异步任务的请求就可以立即响应 选择用线程池的原因是:线程比进程更为可控.不 ...
- 【译】在React中实现条件渲染的7种方法
原文地址:https://scotch.io/tutorials/7-ways-to-implement-conditional-rendering-in-react-applications 借助R ...
- jvm面试题 新生代和 老年代的区别
新生代和老年代的区别(阿里面试官的题目): 所谓的新生代和老年代是针对于分代收集算法来定义的,新生代又分为Eden和Survivor两个区.加上老年代就这三个区.数据会首先分配到Eden区 当中(当然 ...
- 小白的springboot之路(十三)、过滤器、监听器、拦截器
0.前言 过滤器.监听器.拦截器在实际开发中经常需要用到,下面我们来介绍一下spring boot中如何使用: 一.------ 过滤器 ----- 1.作用: 过滤器是客户端与服务器资源文件之间的一 ...
- 生命周期感知 Lifecycle
奉上翻译原文地址: 处理生命周期 :翻译过程中加上了自己的一点理解.理解不对的地方直接评论就好. 生命周期感知组件可以感知其他组件的生命周期,例如 Activity,Fragment等,以便于在组件的 ...
- Win32 API编程——前言
一丶什么是Win32 API? 微软为了保护操作系统的安全性和稳定性,把系统分为内核层和用户层(内核层的代码只能在当CPU的特权级为R0状态下执行,用户层的代码在CPU特权级为R0和R3都能执行),w ...
- leetcode菜鸡斗智斗勇系列(3)--- Jewels and Stones珠宝和钻石
1.原题: https://leetcode.com/problems/jewels-and-stones/ You're given strings J representing the types ...