urllib模块使用笔记
文中所有python代码均使用的是python2.7实现,与python3并不兼容。
UrlLib模块
urllib模块是适用于一个简单的网络数据获取和处理(不能处理有关验证和cookie等功能),官方文档的介绍主要是给了两个文档链接和三个标准:
- 基本网络名词的介绍和格式定义规则
文档地址:http://www.w3.org/pub/WWW/Addressing/Overview.html
HTTP规范文档及其错误代码
相关标准和规范
1) RFC1808(相对URL规范)
2) RFC1738(URL标准)
3) RFC1630(URL规范)
urllib 网页抓取
urllib模块主要的功能就是提供了一个对www协议访问的接口urlopen(),让我们可以直接通过url对网页进行读取,操作比较简单,可以如同操作文件一样读取文件,但也仅限读取,操作相对还是比较简单.
如下,为一个简单的使用urllib模块对网页访问的操作:
import sys,urllib
def accessByUrllib():
print "access html by urllib"
url="http://www.enjoytoday.cn/posts/362"
page=urllib.urlopen(url)
#print "page html:%s" % page.read() #返回html文件内容
print "\npage info:%s " % page.info() #返回基本信息(头信息)
print "\npage code:%s"% page.getcode() #http请求响应码,若非http则返回None
print "\npage url:%s"%page.geturl() #请求url,真实访问url(重定问情况下和url不相同)
print "\npage headers: %s"%page.headers #返回头信息
#将html写入本地,两种方法
url_file=open("./test.html",'wb+')
url_file.write(page.read())
url_file.close()
#使用urllib模块直接写入
urllib.urlretrieve(url,"./test2.html")
if __name__ == "__main__":
accessByUrllib()
如下为返回数据(由于html文件内容较多,所以将其屏蔽):
access html by urllib
page info:Date: Thu, 09 Nov 2017 14:27:43 GMT
Server: Apache/2.4.7 (Ubuntu)
Set-Cookie: JSESSIONID=6266B422E20D2F229556E51B9C4BCF8B.ajp13_worker;path=/;HttpOnly
Content-Language: en-US
Vary: Accept-Encoding
Connection: close
Content-Type: text/html;charset=UTF-8
page code:200
page url:http://www.enjoytoday.cn/posts/362
page headers: Date: Thu, 09 Nov 2017 14:27:43 GMT
Server: Apache/2.4.7 (Ubuntu)
Set-Cookie: JSESSIONID=6266B422E20D2F229556E51B9C4BCF8B.ajp13_worker;path=/;HttpOnly
Content-Language: en-US
Vary: Accept-Encoding
Connection: close
Content-Type: text/html;charset=UTF-8
Process finished with exit code 0
urllib其他用法
如上,为urllib 中的基本对网页的处理,如下介绍一些简单的请求处理以及url的处理操作
请求方式
默认的urllib采用GET方式进行请求操作,如下介绍如何指定请求方式:
def requestMethod(method="GET"):
'''
默认的urllib是以GET方式进行请求,可以通过使用urlencode()方法对其实现post请求,传入数据为类字典类型,key:vaule格式,但
默认参数类型为标准的application/x-www-form-urlencoded表单格式,不可更改
:param method: 指定请求方式:GET,POST
:return:
'''
url="http://www.enjoytoday.cn/posts/362"
if method:
if method=="GET":
page=urllib.urlopen(url)
print "get request return:%s"%page.read()
elif method=="POST":
reload(sys)
sys.setdefaultencoding('utf-8') #解决 'ascii' codec can't encode characters问题,注意需要在调用setdefaultencoding()之前先reload(sys)不然会抛出没有该方法.
dic={"name":u'飞云不在线',"sex":"man"}
params=urllib.urlencode(dic)
page=urllib.urlopen("%s?%s"%(url,params))
print "post request return:%s" %page.read()
else:
raise Exception("pass param format error.")
else:
raise Exception("param must not be Empty.")
如上为方法的基本使用.
url和路径转化
def transferUrl():
'''
url 和本地路径转化
:return:
'''
path = "D://python/test/tt.txt"
url=urllib.pathname2url(pathname=path)
print "path transfer to url:%s" % url
print "url transfer to path:%s" %urllib.url2pathname(url)
字符串的编解码
def encodeStr():
'''
字符串的编码和解码
:return:
'''
s="飞云不在线%%_345&"
quote_s=urllib.quote(s)
quote_plus_s=urllib.quote_plus(s)
unquote_s=urllib.unquote(quote_s)
unquote_plus_s=urllib.unquote_plus(quote_plus_s)
#encode
print "quote encode:%s"%quote_s
print "quote plus encode:%s"%quote_plus_s
#decode
print "quote decode:%s" % unquote_s
print "quote plus decode:%s" % unquote_plus_s
#运行结果如下:
quote encode:%E9%A3%9E%E4%BA%91%E4%B8%8D%E5%9C%A8%E7%BA%BF%25%25_345%26
quote plus encode:%E9%A3%9E%E4%BA%91%E4%B8%8D%E5%9C%A8%E7%BA%BF%25%25_345%26
quote decode:飞云不在线%%_345&
quote plus decode:飞云不在线%%_345&
urllib模块使用笔记的更多相关文章
- Python3学习笔记(urllib模块的使用)转http://www.cnblogs.com/Lands-ljk/p/5447127.html
Python3学习笔记(urllib模块的使用) 1.基本方法 urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, ...
- python学习笔记(十七)网络编程之urllib模块
如何用python打开一个网站或者请求一个接口呢,我们在这篇博客介绍一下. 首先我们得导入一个urllib模块,这个模块是python自带的标准模块,直接导入就能使用,但是用起来不方便,先看个简单的打 ...
- python学习笔记:网络请求——urllib模块
python操作网络,也就是打开一个网站,或者请求一个http接口,可以使用urllib模块.urllib模块是一个标准模块,直接import urllib即可,在python3里面只有urllib模 ...
- urllib模块的使用
Python3学习笔记(urllib模块的使用) 1.基本方法 urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, ca ...
- [自娱自乐] 4、超声波测距模块DIY笔记(四)——终结篇·基于C#上位机软件开发
前言 上一节我们已经基本上把超声波硬件的发射和接收模块全部做好了,接下来我们着手开发一个软硬结合的基于C#的平面定位软件! 目录 一.整体思路 二.效果提前展示 2-1.软件部分展示 2-2.硬件部分 ...
- [自娱自乐] 3、超声波测距模块DIY笔记(三)
前言 上一节我们已经研究了超声波接收模块并自己设计了一个超声波接收模块,在此基础上又尝试用单片机加反相器构成生成40KHz的超声波发射电路,可是发现采用这种设计的发射电路存在严重的发射功率太低问题,对 ...
- Python核心模块——urllib模块
现在Python基本入门了,现在开始要进军如何写爬虫了! 先把最基本的urllib模块弄懂吧. urllib模块中的方法 1.urllib.urlopen(url[,data[,proxies]]) ...
- 【py网页】urllib模块,urlopen
Python urllib 库提供了一个从指定的 URL 地址获取网页数据,然后对其进行分析处理,获取想要的数据. 下面是在 Python Shell 里的 urllib 的使用情况: 01 Pyth ...
- python urllib模块的urlopen()的使用方法及实例
Python urllib 库提供了一个从指定的 URL 地址获取网页数据,然后对其进行分析处理,获取想要的数据. 一.urllib模块urlopen()函数: urlopen(url, data=N ...
随机推荐
- luogu P1850 换教室
题目描述 对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程. 在可以选择的课程中,有 2n 节课程安排在 n 个时间段上.在第 i (1 ≤ i ≤ n)个时间段上,两节内容 ...
- acm模板总结
模板链接 字符串模板 KMP EXKMP Trie 可持久化Trie树+DFS序 01Trie Manacher 字符串哈希 2019上海网络赛G题 17 SA(后缀数组) 最大不重叠相似子串 求两 ...
- HihoCoder1466-后缀自动机六·重复旋律9
小Hi平时的一大兴趣爱好就是演奏钢琴.我们知道一段音乐旋律可以被表示为一段字符构成的字符串. 现在小Hi已经不满足于单单演奏了!他通过向一位造诣很高的前辈请教,通过几周时间学习了创作钢琴曲的基本理论, ...
- HashMap的常见问题
关于HashMap的一些常见的问题,自己总结一下: 首选HashMap在jdk1.7和jdk1.8里面的实现是不同的,在jdk1.7中HashMap的底层实现是通过数组+链表的形式实现的,在jdk1. ...
- python列表式推导
1.基本语法 [表达式 for 变量 in 列表] 或者 : [表达式 for 变量 in 列表 if 条件] 2.示例 生成列表 li=[x for x in range(10)] print(l ...
- 源码分析 RocketMQ DLedger(多副本) 之日志复制(传播)
目录 1.DLedgerEntryPusher 1.1 核心类图 1.2 构造方法 1.3 startup 2.EntryDispatcher 详解 2.1 核心类图 2.2 Push 请求类型 2. ...
- 学Maven,这篇万余字的教程,真的够用了!
1 Maven 介绍 1.1 为什么使用 Maven 由于 Java 的生态非常丰富,无论你想实现什么功能,都能找到对应的工具类,这些工具类都是以 jar 包的形式出现的,例如 Spring,Spri ...
- 【CSS】318- CSS实现宽高等比自适应容器
点击上方"前端自习课"关注,学习起来~ 在最近开发移动端页面,遇到这么一个情况:当页面宽度 100% 时,高度为宽度一半,并随手机宽度变化依然是一半. 于是我们就需要实现一个宽度自 ...
- org json 和 fast json 掺杂使用引起的错误
1. 取值的不同 当所取得key不存在时: org json 会抛异常 fast json 会返回null 示例: com.alibaba.fastjson.JSONObject fastJson = ...
- 非线性函数的最小二乘拟合及在Jupyter notebook中输入公式 [原创]
突然有个想法,能否通过学习一阶RC电路的阶跃响应得到RC电路的结构特征——时间常数τ(即R*C).回答无疑是肯定的,但问题是怎样通过最小二乘法.正规方程,以更多的采样点数来降低信号采集噪声对τ估计值的 ...