Python标准库之urllib,urllib2

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

在Python 2中,urllib功能分散在几个不一样的库模块中,包括urllib、urllib二、urlparse等。在Python 3中,全部功能都合并在urllib包中。python

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

要抓取html网页,很简单chrome

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中是不能出现一些特殊的符号的,有些符号有特殊的用途。cookie

urllib.quote()post

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

urllib.unquote()ui

解码

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)
相关文章
相关标签/搜索