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. 恢复被误操作删除的数据 fn_dblog

    -- Script Name: Recover_Deleted_Data_Proc -- Script Type : Recovery Procedure  -- Develop By: Muhamm ...

  2. 初试zabbix

    一.zabbix简介    zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案.       zabbix由zabbix server与可选组件zabbix a ...

  3. 【干货分享】.NET单元测试电子书

     文章目录: 引言 书籍首页 书籍目录 备注 下载 回到顶部 引言:   平时没有项目压力时候,首先想到的是充电学习,要系统学习都会想到购买书籍,或者向同事借阅.买的书多了烦恼也来了,因为大学到现在5 ...

  4. JSP编程中常用的JavaScript技术(转载)

    1.<tronMouseOver=this.style.backgroundColor=’#FFFFFF’ onMouseOut=this.style.backgroundColor=”> ...

  5. HttpWatch网络抓包工具的使用

    HttpWatch网络抓包工具是专为IE浏览器集成的一款网络拽包工具.   是一款强大的网页数据分析软件,是最好用的抓包工具,httpwatch可以抓到上传视屏图片的包,一般的抓包软件是抓不到的.打开 ...

  6. Java Web开发中的名词解释

    1.JVM Java虚拟机,class文件的运行时环境,就好比软件运行在操作系统一样,java要运行在JVM中才行,这也是Java之所以支持扩平台的基础. 2.Servlet/JSP 是满足一定接口需 ...

  7. C# 解析带前缀的Xml节点内容

    一般的xml文件相信大家都会解析了,但是遇到有命名空间的带前缀的xml,对于新手可能会有点问题.我这里在论坛解答的时候就遇到过一题,见怎么获取XML节点里面的内容,在线求教.这里给大家演示一下. 他的 ...

  8. PHP之图形处理

    图形处理 PHP 的图形处理,主要功能集中在 PHP 的图形处理函数. 需要先掌握一些要点.什么叫图片,怎么显示图片. 所谓的图片,其实也是一种文件,只是内容不是我们肉眼直接可见的.如果我们用记事本打 ...

  9. Visual C++ 对话框增加菜单栏

    1.添加菜单资源     在resourceview视图中右击选择insert,添加一个菜单资源IDR_MENU1,同时设定好响应的菜单项,例 如:         菜单1               ...

  10. OpenFileDialog组件打开文件....待续

    1.常用属性 InitialDirectory           对话框的初始目录 this.openFileDialog1.InitialDirectory = "d:\\"; ...