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. Linux下如何查看哪些端口处于监听状态

    查看某一端口的占用情况: lsof -i:端口号 前提:首先你必须知道,端口不是独立存在的,它是依附于进程的.某个进程开启,那么它对应的端口就开启了,进程关闭,则该端口也就关闭了.下次若某个进程再次开 ...

  2. iOS 隔离导航控制器

    题外话:最近这两个月一直很闲,项目上基本没有啥大的需求.对于程序员来说,如果没有需求其实是一件很难受的事情,之前好多次在项目中没事找事,该优化的优化,该整理的整理.可能好多程序员都遇到过与我类似的情况 ...

  3. WPF设置窗口模式(Windowstyle=“None”)

    当WindowStyle="None"时,设置AllowsTransparency="True",则不会出现黑色Border,然后可以另外设置外边的Border ...

  4. 如何自动拼接 Update语句,仅Update已修改的字段

    我们通常使用update语句更新数据库记录,例如使用update user set username='001', nickname='Tom', age=18 where id = 1语句更新use ...

  5. yiic创建YII应用 "php.exe"不是内部或外部命令 解决办法

    第一步:运行CMD命令.   第二步:进入Yiic文件的目录   (例如在D盘里面 D:/yii/framework)   第三步:D:\yii\framework>yiic webapp D: ...

  6. 配置Apache+Mysql+Php

    以下操作均在Debian 6.0 64bit 环境root权限下进行,如果提示权限不足请切换至root用户或者sudo,本人比较喜欢自行安装,因为安装的过程中能最小化安装而且能够知道安装了什么,然后可 ...

  7. QML定时器

    QML中的定时器能够周期性的触发一个事件,其使用非常简单.方便.这里给出一个示例: import QtQuick 2.4 import QtQuick.Controls 1.3 import QtQu ...

  8. 【转】c#文件操作大全(一)

    1.创建文件夹//using System.IO;Directory.CreateDirectory(%%1); 2.创建文件//using System.IO;File.Create(%%1); 3 ...

  9. "严格模式" use strict 详解

    一.概述 除了正常运行模式,ECMAscript 5添加了第二种运行模式:"严格模式"(strict mode).顾名思义,这种模式使得Javascript在更严格的条件下运行. ...

  10. 关于H5 storage 的一些注意事项以及用法

    在我们使用H5 storage之前,先了解一下storage的介绍吧: Storage模块管理应用本地数据存储,用于应用数据的保存和读取,应用本地数据localStorage,sessionStora ...