urllib模块提供了一些高级接口,用于编写需要与HTTP服务器交互的客户端。典型的应用程序包括从网页抓取数据、自动化、代理、网页爬虫等。

在Python 2中,urllib功能分散在几个不同的库模块中,包括urllib、urllib2、urlparse等。在Python 3中,所有功能都合并在urllib包中。

1. urlopen(url[, data[, timeout]]) 

要抓取html网页,很简单

import urllib2
response=urllib2.urlopen('http://www.google.com')

urlopen创建一个表示远程url的类文件对象,然后像本地文件一样操作这个类文件对象来获取远程数据。参数url表示远程数据的路径,一般是网址。如果要执行更加复杂的操作,如修改HTTP报头,可创建Request实例并当为url参数使用;参数data表示以post方式提交到url的数

据,需要经过URL编码;timeout是可选的超时选项。urlopen返回 一个类文件对象,他提供了如下方法:

  • read() , readline() , readlines() , fileno() , close() :这些方法的使用方式与文件对象完全一样
  • info():返回一个mimetools.Message对象,表示远程服务器返回的头信息
  • getcode():返回整数形式的HTTP响应码。例如:成功时返回200,未找到文件时返回404
  • geturl():返回请求的实际url
>>> response.getcode()
200
>>> response.geturl()
'http://www.google.com.hk/'

  info()返回的mimetools.Message映射对象有headers、getheader()、getplist() 、getparam()等方法。

message=response.info()
message.headers #返回http报头信息的列表
for header in message:
print header,message.getheader(header) #获取报头信息
for header in message:
print header,message[header] #message可用字典的方法分析
message.getparam('charset') #获取url编码

2. URL编码 urllib.urlencode()

urllib中还提供了一些方法,用于对url进行编码、解码。url中是不能出现一些特殊的符号的,有些符号有特殊的用途。

urllib.quote()

使用适合URL内容的转义序列替换string中的特殊字符。字母、数字、下划线(_)、逗号(,)、句号(.)、连字符(-)都保持不变。其他字符转换成%xx形式的转义序列,默认使用utf-8编码。

urllib.unquote()

解码

urllib.urlencode(query)

将query中的查询值转换成一个URL编码的字符串。query可以是一个字典,也可以是一个(key,value)的对序列。得到的是以'&'字符分割的'key=value'对序列。

import urllib
form_data={'user':'jhon','passwd':'123456'} #要提交的表单数据
url_data=urllib.urlencode(form_data) #url_data被编码为'passwd=123456&user=jhon'
full_url='http://www.example.com'+'?'+url_data
u=urllib2.urlopen(full_url) 

3. urllib2.Request(url [, data [, headers ]])

Request实例可以替代urlopen(url)中的url来实现更加复杂的操作。headers是一个字典,包含了可表示HTTP报头内容的键值映射。

有一些网站不希望被某些程序浏览或者针对不同的浏览器返回不同的版本。默认情况下,urlib2把自己识别为Python-urllib/x.y(这里的 xy是python发行版的主要或次要的版本号,如,

Python-urllib/2.7)。浏览器区别自身的方式是通过User-Agent头。如果要模拟chrome浏览器连接:

headers={'User-Agent':'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.102 Safari/537.36'}
r=urllib2.Request("http://www.google.com",headers=headers)
u=urllib2.urlopen(r)

要处理cookie的时候,注意不要在Request里面设置headers,因为cookie也在headers里面,设置headers会将cookie覆盖掉。

可以用Request().add_header(key,value)方法。

import urllib2
import cookielib
cookie=cookielib.CookieJar()
opener=urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie))
r=urllib2.Request('http://www.google.com')
r.add_header('User-Agent','Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.102 Safari/537.36')
u=opener.open(r)

  

Python标准库之urllib,urllib2的更多相关文章

  1. Python标准库之urllib,urllib2自定义Opener

    urllib2.urlopen()函数不支持验证.cookie或者其它HTTP高级功能.要支持这些功能,必须使用build_opener()函数创建自定义Opener对象. 1. build_open ...

  2. Python 标准库 urllib2 的使用细节[转]

    转自[http://zhuoqiang.me/python-urllib2-usage.html] Python 标准库中有很多实用的工具类,但是在具体使用时,标准库文档上对使用细节描述的并不清楚,比 ...

  3. Python 标准库 urllib2 的使用细节

    刚好用到,这篇文章写得不错,转过来收藏.    转载自 道可道 | Python 标准库 urllib2 的使用细节 Python 标准库中有很多实用的工具类,但是在具体使用时,标准库文档上对使用细节 ...

  4. 道可叨 | Python 标准库 urllib2 的使用细节

    道可叨 | Python 标准库 urllib2 的使用细节 request = urllib2.Request(uri) request.add_header('User-Agent', 'fake ...

  5. Python 标准库 urllib2 的使用细节(转)

    http://www.cnblogs.com/yuxc/archive/2011/08/01/2123995.html http://blog.csdn.net/wklken/article/deta ...

  6. 转Python 标准库 urllib2 的使用细节

    Python 标准库中有很多实用的工具类,但是在具体使用时,标准库文档上对使用细节描述的并不清楚,比如 urllib2 这个 HTTP 客户端库.这里总结了一些 urllib2 库的使用细节. 1 P ...

  7. python标准库00 学习准备

    Python标准库----走马观花 python有一套很有用的标准库.标准库会随着python解释器一起安装在你的电脑上的.它是python的一个组成部分.这些标准库是python为你准备的利器,可以 ...

  8. Python标准库——走马观花

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! Python有一套很有用的标准库(standard library).标准库会随着 ...

  9. Python标准库、第三方库和外部工具汇总

    导读:Python数据工具箱涵盖从数据源到数据可视化的完整流程中涉及到的常用库.函数和外部工具.其中既有Python内置函数和标准库,又有第三方库和工具. 这些库可用于文件读写.网络抓取和解析.数据连 ...

随机推荐

  1. (已实现)相似度到大数据查找之Mysql 文章匹配的一些思路与提高查询速度

    需求,最近实现了文章的原创度检测功能,处理思路一是分词之后做搜索引擎匹配飘红,另一方面是量化词组,按文章.段落.句子做数据库查询,功能基本满足实际需求. 接下来,还需要在海量大数据中快速的查找到与一句 ...

  2. jQuery 源码分析 7: sizzle

    jQuery使用的是sizzle这个选择器引擎,这个引擎以其高速著称,其实现十分精妙但是也足够复杂,下面现简单分析一下相关的代码. 在jQuery的部分API接口是直接引用了Sizzle的方法,这些接 ...

  3. 使用CHttpFile从服务器端正确的读取数据

    前段时间在给软件做升级提示模块的时候发现一个问题,就是使用CHttpFile对象无法从服务器端获取到正确的响应数据长度,无论是使用CHttpFile:: QueryInfo方法,还是使用CHttpFi ...

  4. InstallShield : 如何查找编译后的 Merge Module存放路径

    工程菜单栏中依次选择  Tools ---> Options… ,选择 Merge Modules tab 页,如下,就会看到Merge Module的存放路径,也可以根据需求修改. Merge ...

  5. 第30条:用enum代替int常量

    在java1.5之前,表示枚举类型的常用模式是声明一组具名的int常量,每个类型成员一个常量: public static final int APPLE_FUJI = 0; public stati ...

  6. 实习笔记-1:sql 2008r2 如何创建定时作业

    在公司实习了近一个月,学了很多东西.这一篇是一些比较基础的东西,本人是小菜鸟,不喜欢大神来喷.大神欢迎出门点右上角.谢谢~ 说大实话,对于数据库,我在还没出来实习的时候就是只懂写一些sql语句以及知道 ...

  7. JSON字符串转换为JSON对象

    一.JSON字符串转换为JSON对象 A:eval函数 eval函数可以直接将本质符合或者近似符合JSON格式的字符串转换为JSON对象,使用方式如: eval('(' + str + ')'); / ...

  8. MIT 2012分布式课程基础源码解析一-源码概述

    课程主页 课程介绍:本课程会在给出的源码的基础上要求完成8个lab Lab overviewLab 1 - Lock ServerLab 2 - Basic File ServerLab 3 - MK ...

  9. #Leet Code# Unique Path(todo)

    描述: 使用了递归,有些计算是重复的,用了额外的空间,Version 1是m*n Bonus:一共走了m+n步,例如 m = 2, n = 3 [#, @, @, #, @],所以抽象成数学问题,解是 ...

  10. Android全部权限详解(manifest.xml)

    当我们在写android程序时有很多功能都要在androidmanifest.xml中加入权限申明才能正常使用,下面就把所有的权限介绍一下: android.permission.ACCESS_CHE ...