博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
urllib模块使用笔记
阅读量:5972 次
发布时间:2019-06-19

本文共 3713 字,大约阅读时间需要 12 分钟。

文中所有python代码均使用的是python2.7实现,与python3并不兼容。

UrlLib模块

urllib模块是适用于一个简单的网络数据获取和处理(不能处理有关验证和cookie等功能),官方文档的介绍主要是给了两个文档链接和三个标准:

- 基本网络名词的介绍和格式定义规则

文档地址:

  • HTTP规范文档及其错误代码

    文档地址:

  • 相关标准和规范

    1) RFC1808(相对URL规范)
    2) RFC1738(URL标准)
    3) RFC1630(URL规范)

urllib 网页抓取

urllib模块主要的功能就是提供了一个对www协议访问的接口urlopen(),让我们可以直接通过url对网页进行读取,操作比较简单,可以如同操作文件一样读取文件,但也仅限读取,操作相对还是比较简单.

如下,为一个简单的使用urllib模块对网页访问的操作:

import sys,urllibdef 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 urllibpage info:Date: Thu, 09 Nov 2017 14:27:43 GMTServer: Apache/2.4.7 (Ubuntu)Set-Cookie: JSESSIONID=6266B422E20D2F229556E51B9C4BCF8B.ajp13_worker;path=/;HttpOnlyContent-Language: en-USVary: Accept-EncodingConnection: closeContent-Type: text/html;charset=UTF-8page code:200page url:http://www.enjoytoday.cn/posts/362page headers: Date: Thu, 09 Nov 2017 14:27:43 GMTServer: Apache/2.4.7 (Ubuntu)Set-Cookie: JSESSIONID=6266B422E20D2F229556E51B9C4BCF8B.ajp13_worker;path=/;HttpOnlyContent-Language: en-USVary: Accept-EncodingConnection: closeContent-Type: text/html;charset=UTF-8Process 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%26quote plus encode:%E9%A3%9E%E4%BA%91%E4%B8%8D%E5%9C%A8%E7%BA%BF%25%25_345%26quote decode:飞云不在线%%_345&quote plus decode:飞云不在线%%_345&

转载于:https://www.cnblogs.com/amiko/p/7906202.html

你可能感兴趣的文章
洛谷 P2486 BZOJ 2243 [SDOI2011]染色
查看>>
数值积分中的辛普森方法及其误差估计
查看>>
Web service (一) 原理和项目开发实战
查看>>
跑带宽度多少合适_跑步机选购跑带要多宽,你的身体早就告诉你了
查看>>
Javascript异步数据的同步处理方法
查看>>
iis6 zencart1.39 伪静态规则
查看>>
SQL Server代理(3/12):代理警报和操作员
查看>>
Linux备份ifcfg-eth0文件导致的网络故障问题
查看>>
2018年尾总结——稳中成长
查看>>
通过jsp请求Servlet来操作HBASE
查看>>
Shell编程基础
查看>>
Shell之Sed常用用法
查看>>
Centos下基于Hadoop安装Spark(分布式)
查看>>
mysql开启binlog
查看>>
设置Eclipse编码方式
查看>>
分布式系统唯一ID生成方案汇总【转】
查看>>
并查集hdu1232
查看>>
Mysql 监视工具
查看>>
Linux Namespace系列(09):利用Namespace创建一个简单可用的容器
查看>>
博客搬家了
查看>>