当前位置: 首页 > 编程日记 > 正文

Python3 的urllib实例

在Python3中合并了 urllib 和 urllib2, 统一命名为 urllib 了,我觉得这样更加合理了。让我们可以像读取本地文件一样读取WEB上的数据。封装了一个类,供以后方便使用吧!并附带有许多的应用实例。

一、封装的类

#!/usr/bin/env python3  
# -*- coding: utf-8 -*-  import time  
import sys  
import gzip  
import socket  
import urllib.request, urllib.parse, urllib.error  
import http.cookiejar  class HttpTester:  def __init__(self, timeout=10, addHeaders=True):  socket.setdefaulttimeout(timeout)   # 设置超时时间  
   self.__opener = urllib.request.build_opener()  urllib.request.install_opener(self.__opener)  if addHeaders: self.__addHeaders()  def __error(self, e):  '''''错误处理'''  print(e)  def __addHeaders(self):  '''''添加默认的 headers.'''  self.__opener.addheaders = [('User-Agent', 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:22.0) Gecko/20100101 Firefox/22.0'),  ('Connection', 'keep-alive'),  ('Cache-Control', 'no-cache'),  ('Accept-Language:', 'zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3'),  ('Accept-Encoding', 'gzip, deflate'),  ('Accept', 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8')]  def __decode(self, webPage, charset):  '''''gzip解压,并根据指定的编码解码网页'''  if webPage.startswith(b'\x1f\x8b'):  return gzip.decompress(webPage).decode(charset)  else:  return webPage.decode(charset)  def addCookiejar(self):  '''''为 self.__opener 添加 cookiejar handler。'''  cj = http.cookiejar.CookieJar()  self.__opener.add_handler(urllib.request.HTTPCookieProcessor(cj))  def addProxy(self, host, type='http'):  '''''设置代理'''  proxy = urllib.request.ProxyHandler({type: host})  self.__opener.add_handler(proxy)  def addAuth(self, url, user, pwd):  '''''添加认证'''  pwdMsg = urllib.request.HTTPPasswordMgrWithDefaultRealm()  pwdMsg.add_password(None, url, user, pwd)  auth = urllib.request.HTTPBasicAuthHandler(pwdMsg)  self.__opener.add_handler(auth)  def get(self, url, params={}, headers={}, charset='UTF-8'):  '''''HTTP GET 方法'''  if params: url += '?' + urllib.parse.urlencode(params)  request = urllib.request.Request(url)  for k,v in headers.items(): request.add_header(k, v)    # 为特定的 request 添加指定的 headers  try:  response = urllib.request.urlopen(request)  except urllib.error.HTTPError as e:  self.__error(e)  else:  return self.__decode(response.read(), charset)  def post(self, url, params={}, headers={}, charset='UTF-8'):  '''''HTTP POST 方法'''  params = urllib.parse.urlencode(params)  request = urllib.request.Request(url, data=params.encode(charset))  # 带 data 参数的 request 被认为是 POST 方法。  for k,v in headers.items(): request.add_header(k, v)  try:  response = urllib.request.urlopen(request)  except urllib.error.HTTPError as e:  self.__error(e)  else:  return self.__decode(response.read(), charset)  def download(self, url, savefile):  '''''下载文件或网页'''  header_gzip = None  for header in self.__opener.addheaders:     # 移除支持 gzip 压缩的 header  if 'Accept-Encoding' in header:  header_gzip = header  self.__opener.addheaders.remove(header)  __perLen = 0  def reporthook(a, b, c):    # a:已经下载的数据大小; b:数据大小; c:远程文件大小;  if c > 1000000:  nonlocal __perLen  per = (100.0 * a * b) / c  if per>100: per=100  per = '{:.2f}%'.format(per)  print('\b'*__perLen, per, end='')     # 打印下载进度百分比  
                sys.stdout.flush()  __perLen = len(per)+1  print('--> {}\t'.format(url), end='')  try:  urllib.request.urlretrieve(url, savefile, reporthook)   # reporthook 为回调钩子函数,用于显示下载进度  except urllib.error.HTTPError as e:  self.__error(e)  finally:  self.__opener.addheaders.append(header_gzip)  print()  

二、应用实例

  1. 在OSC上动弹一下
ht = HttpTester()  
ht.addCookiejar()  # 为了隐私,把有些关键字隐藏了哦!  
ht.get('https://www.oschina.net/home/login?goto_page=http%3A%2F%2Fwww.oschina.net%2F')  
ht.post(url = 'https://www.oschina.net/action/user/hash_login',  params = {'email': '****@foxmail.com',  'pwd': 'e4a1425583d37fcd33b9*************',   #密码哈希,Firefox开发工具抓取的  'save_login': '1'}  
)  
ht.get('http://www.oschina.net/')  
ht.post(url = 'http://www.oschina.net/action/tweet/pub',  params = {'user_code': '8VZTqhkJOqhnuugHvzBtME4***********',  'user': '102*****',  'msg': '大家在动弹什么? via:(python3, urllib) ->{t}'.format(t = time.ctime())}  
)  

2.金山快盘签到送空间

ht = HttpTester()  
ht.addCookiejar()  # 为了隐私,把有些关键字隐藏了哦!  
ht.get('https://www.kuaipan.cn/account_login.htm')  
ht.post(url='https://www.kuaipan.cn/index.php?ac=account&op=login',  params={'username': '****@qq.com',  'userpwd': 'lyb********',  'isajax': 'yes'}  
)  
ht.get('http://www.kuaipan.cn/index.php?ac=zone&op=taskdetail')  
ht.get('http://www.kuaipan.cn/index.php?ac=common&op=usersign')  

相关文章:

Java中Filter、Servlet、Listener的学习

1、Filter的功能filter功能,它使用户可以改变一个 request和修改一个response. Filter 不是一个servlet,它不能产生一个response,它能够在一个request到达servlet之前预处理request,也可以在离开 servlet时处理response.换种说法,filter其实是一个”servlet chainin…

CentOS 6安装DHCP

#wget ftp://ftp.isc.org/isc/dhcp/dhcp-4.2.3/dhcp-4.2.3.tar.gz #tar xvzf dhcp-4.2.3.tar.gz# cd dhcp-4.2.3#./configure #make #make install

小米AI实验室六篇论文获ICASSP2022收录,多模态语音唤醒挑战赛夺冠

1月22日,全球语音、声学顶级会议ICASSP 2022公布了论文入选名单,小米AI实验室6篇学术论文被接收。小米“自由说”系统在MISP(基于多模态信息的语音处理)挑战赛中荣获多模态语音唤醒第一名和多模态语音识别第二名,并受邀…

React + Koa 实现服务端渲染(SSR)

⚛️React是目前前端社区最流行的UI库之一,它的基于组件化的开发方式极大地提升了前端开发体验,React通过拆分一个大的应用至一个个小的组件,来使得我们的代码更加的可被重用,以及获得更好的可维护性,等等还有其他很多…

11 款可替代 top 命令的工具!

‍‍作者 | JackTian来源 | 杰哥的IT之旅在 Linux 环境下 top 命令都不陌生,它以实时动态的方式查看系统的整体运行情况,综合了多方信息监测系统性能和运行信息的实用工具,通过 top 命令所提供的互动式界面,可以用热键来进行管理。…

几个重要的RFC

RFC目录 权威无须解释 http://www.ietf.org/rfc/RFC中文目录http://man.chinaunix.net/develop/rfc/default.htm几个常用的RFC参考: RFC1945 超文本传输协议--HTTP/1.0 RFC2616超文本传输协议--HTTP/1.1 对 RFC2068的补充RFC3920可扩展的消息和出席信息协议 (XMPP)…

iOS开发笔记-两种单例模式的写法

iOS开发笔记-两种单例模式的写法 单例模式是开发中最常用的写法之一,iOS的单例模式有两种官方写法,如下: 不使用GCD #import "ServiceManager.h"static ServiceManager *defaultManager;implementation ServiceManager(…

流式大数据处理的三种框架:Storm,Spark和Samza

2019独角兽企业重金招聘Python工程师标准>>> 许多分布式计算系统都可以实时或接近实时地处理大数据流。本文将对三种Apache框架分别进行简单介绍,然后尝试快速、高度概述其异同。 Apache Storm 在Storm中,先要设计一个用于实时计算的图状结构…

CentOS用yum安装X Window

安装X图形界面系统yum list 列出所有可安装的软件包 可以通过 yum grouplist 来查看可能批量安装哪些列表 先装X windows #yum groupinstall X Window System -y 安装GNOME桌面环境#yum groupinstall GNOME Desktop Environment -y 安装KDE桌面环境#yum groupinstall KDE (K D…

Oracle VDI 安装

为什么80%的码农都做不了架构师?>>> 你可以在这里找到本文的原文。 虽然说Oracle已经停止了VDI的开发,之后支持服务业很快停止了。但是,作为经典的桌面虚拟化产品,还是值得研究一番。虽然Oracle VDI的文档已经写的很详…

Python 写了一个网页版的「P图软件」,惊呆了!

作者 | 小欣来源 | Python爱好者集中营今天是开工第一天,这篇文章可以算作是虎年的第一篇干货技术类文章了,今天小编用Python做了一个网页版的“P图软件”,大致的流程在于我们可以将上传的照片进行黑白处理、铅笔素描处理、模糊化处理等一系列…

Template mode HTML5 has not been configured

#thymeleafspring.thymeleaf.prefixclasspath:/templates/spring.thymeleaf.suffix.htmlspring.thymeleaf.cachefalsespring.thymeleaf.content-typetext/htmlspring.thymeleaf.enabledtruespring.thymeleaf.encodingUTF-8spring.thymeleaf.modeHTML5 解决办法:注释…

Java数据结构与算法(第四章栈和队列)

2019独角兽企业重金招聘Python工程师标准>>> 本章涉及的三种数据存储类型:栈、队列和优先级队列。 不同类型的结构 程序员的工具 数组是已经介绍过的数据存储结构,和其他结构(链表、树等等)一样,都适用于数…

可构建AI的「AI」诞生:几分之一秒内,就能预测新网络的参数

‍‍来源 | 学术头条人工智能在很大程度上是一场数字游戏。当深度神经网络在 10 年前开始超越传统算法,是因为我们终于有了足够的数据和处理能力来充分利用它们。今天的神经网络更依赖于数据和算力。训练网络时,需要仔细调整表征网络的数百万甚至数十亿参…

It is not safe to rely on the system's timezone settings

在写php程序中有时会出现这样的警告: PHP Warning: date(): It is not safe to rely on the systems timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those metho…

.NET MVC+ EF+LINQ 多表联查VIEW显示列表

1.VIEW 页面显示代码 <link href"~/Content/bootstrap.css" rel"stylesheet" /><div class"well"><table class"table"><tr><th>用户名</th><th>地址</th><th>订单编号</th…

从奥运订票系统说起——谈FastCGI 与IT 架构

2008年&#xff0c;对于首都人民来说&#xff0c;没有什么比奥运会更大的事情了。如何买到一张称心如意的比赛门票&#xff0c;也成了很多人的一个梦想。然而&#xff0c;在奥运官网抢票购买的时候&#xff0c;这个梦想却轻易地被网上购票系统的当机击成碎片&#xff0c;很多充…

【哲学百科】文艺复兴及唯理主义时期(公元1500~公元1750)

我为达目的&#xff0c;不择手段-尼古拉.马基雅维利要令习惯于君主统治的民众保有自由是一件多么困难的事情。马基雅维利的观点之一是君主不应受到道德标准的束缚&#xff0c;而应竭尽所能保全自身的荣耀以及所统治的城邦的胜利与繁荣&#xff0c;这种做法随后被人们归为现实主…

如何用 OpenGL 绘制雪花?

作者 | 许向武 责编 | 张红月出品 | CSDN博客看冬奥才知道&#xff0c;阿勒泰不但是中国的“雪都”&#xff0c;还是“人类滑雪起源地”。这个说法是否成立&#xff0c;姑且不论&#xff0c;阿勒泰的雪的确很漂亮。冬奥会有一个宣传片&#xff0c;就是借用一朵阿勒泰雪花…

面试之Hashtable和ConcurrentHashMap

那么要如何保证HashMap的线程安全呢&#xff1f; 方法有很多&#xff0c;比如使用Hashtable或者Collections.synchronizedMap&#xff0c;但是这两位选手都有一个共同的问题&#xff1a;性能。因为不管是读还是写操作&#xff0c;他们都会给整个集合上锁&#xff0c;导致同一时…

PHP动态编译出现Cannot find autoconf

在安装完PHP后,想动态编译PHP的memcache扩展库 cd memcache-2.2.5//usr/local/webserver/php/bin/phpize./configure --with-php-config/usr/local/webserver/php/bin/php-config 但是执行/usr/local/webserver/php/bin/phpize时出现错误:Configuring for:PHP Api Version: …

AnimeGANv2 实现动漫风格迁移,简单操作

作者 | Yunlord出品 | CSDN博客前言之前一直在研究如何将图像动漫化&#xff0c;尝试了阿里云api和百度api&#xff0c;效果都不尽如人意。结果发现了一个宝藏github项目——AnimeGANv2&#xff0c;能够将现实世界场景照片进行动漫风格化。可以看出AnimeGAN的效果非常好&#x…

C#调用win32 api程序实例

1、声明static extern 方法&#xff0c;使用DllImport特性 class MyClass{[DllImport("kernel32", SetLastError true)]public static extern int GetCurrentDirectory(int a, StringBuilder b);} 2、调用 StringBuilder sbnew StringBuilder {Length 250}; MyClas…

Python 之 pip拒绝访问

起因 在我使用pip安装第三方库的时候&#xff0c;控制台提示我升级pip版本 You are using pip version 9.0.1, however version 10.0.1 is available. You should consider upgrading via the python -m pip install --upgrade pip command. 很显然&#xff0c;需要使用这样的指…

Unix / 类 Unix shell 中有哪些很酷很冷门很少用很有用的命令?(转)

著作权归作者所有。 商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。 作者&#xff1a;孙立伟 链接&#xff1a;http://www.zhihu.com/question/20140085/answer/14107336 来源&#xff1a;知乎 这个问题quora上有人提过 What are some lesser known but useful…

干货满满的 Python 实战项目,点赞收藏

作者 | 俊欣来源 | 关于数据分析与可视化今天小编来给大家介绍3个干货满满的计算机视觉方向的Python实战项目&#xff0c;主要用到的库有opencv-pythonnumpypillow要是大家所配置的环境当中没有这几个模块的话&#xff0c;就需要先用pip命令下载安装pip install opencv-python …

php安装完成以后要复制php.ini文件

直接 #find / -name "php.ini" 找不到&#xff0c;是因为安装php的时候没有复制配置文件 php版本变化以后ini文件名有变 php.ini-production对应于php.ini-recommended php.ini-development对应于php.ini-dist二者差异&#xff1f; 由于版本更新,这些文件有了新的命…

MASQUERADE --random 端口不随机

iptables -t nat -A POSTROUTING -o xxxx -j MASQUERADE --random发现源端口并不是随机的而是有规律递增&#xff0c;经过Google的搜索查找&#xff0c;发现新的版本有--random-full 这个参数iptables -t nat -A POSTROUTING -o xxxx -j MASQUERADE --random-full经过测试端口随…

PHP安装与使用VLD查看opcode代码【PHP安装第三方扩展的方法】

需要分析PHP代码的性能&#xff0c;或者说实现同样功能的代码到底哪个更好呢&#xff1f;或者说想知道底层的实现可以使用VLD查看opcode 下载与安装VLD # wget http://pecl.php.net/get/vld-0.11.2.tgz# tar zxvf vld-0.11.2.tgz# cd ./vld-0.11.2# /usr/local/php/bin/phpize …

实现数组字符串翻转的两种方法

//第一种方法&#xff1a;递归法 #include <stdio.h> int reverse_string(char * string) {if (*string ! \0){reverse_string(string1);printf("%c", *string);} } int main() {char *string "abcde";printf("源字符串为&#xff1a;%s\n&quo…