urllib和urllib2常用方法

来源:互联网 发布:淘宝如何修改收货地址 编辑:程序博客网 时间:2024/05/22 17:06

在写爬虫时常常用法一些方法,这里我简单做一下归纳

一部分:访问服务器

1.html=urllib2.urlopen("http://www.baidu.com")打开网页,中间包含了一个request请求

2.content=html.read()将上面内容打开网页内容读取下来

3.request = urllib2.Request(url, values, headers)  发送特定请求,post请求,values和headers均是字典,但是values需要编码,而headers不需要编码

4.html=urllib2.urlopen(request)和1的内容基本相似

5.urllib.urlencode(values)使用request发送请求之前还需要将数据进行编码,注意这个是urllib而不是urllib2

6.urllib2.ProxyHandler()设置代理服务其进行访问网站,用处不用多说

importurllib2
enable_proxy =True
proxy_handler=urllib2.ProxyHandler({"http":'http://some-proxy.com:8080'})
null_proxy_handler =urllib2.ProxyHandler({})
ifenable_proxy:
    opener=urllib2.build_opener(proxy_handler)
else:
    opener=urllib2.build_opener(null_proxy_handler)
urllib2.install_opener(opener)
功能是enable_proxy为true则用代理服务器,否则设置代理服务其为空,就是本地主机访问了

二:异常处理

1.urllib2.URLError访问网页不存在

2.HTTPError是上面异常子类,报错时会显示各种状态吗,如404,401

根据经验,父类一般写在子类下面,看下面代码

importurllib2
 
req=urllib2.Request(“www.baidu.com”)
try:
    urllib2.urlopen(req)
except urllib2.HTTPError,e:
    printe.code
except urllib2.URLError,e:
    printe.reason
else:
    print"OK"

三:cookie使用

ccokie:Cookie,指某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据,urllib2可以保存我们的cookie数据,因为cookies一般是是保存在浏览器的,这里urllib2充当浏览器功能

1.opener,urlopen()是一个默认的opener,当需要使用cookie时则需要新建opener,可以实现模拟登陆服务器功能

2.cookielib功能非常强大CookieJar、FileCookieJar、MozillaCookieJar、LWPCookieJar。他们之间的关系是CookieJar —-派生—->FileCookieJar —-派生—–>MozillaCookieJar和LWPCookieJar

3.将cookieJar获取cookie功能,cookie变量值是保存在下面例子的cookie变量中的

#coding=utf-8
import urllib2
import cookielib


cookie=cookielib.CookieJar()
hander=urllib2.HTTPCookieProcessor(cookie)
opener=urllib2.build_opener(hander)
response=opener.open("http://www.baidu.com")#打开网页后才能拥有cookie值
for item in cookie:
print "Name= "+item.name
print "value= "+item.value

4.强cookie值保存在文件中,保存的cookie是经过格式化的,如果将上面的name和value写在文件里会很乱

这时候要使用FileCookieJar()子类MozillaCookieJar

#coding=utf-8
import urllib2
import cookielib
filename="C:\Users\Administrator\Desktop\wanlei\wanleicookie.txt"
cookie=cookielib.MozillaCookieJar(filename)
hander=urllib2.HTTPCookieProcessor(cookie)
opener=urllib2.build_opener(hander)
response=opener.open("http://www.baidu.com")
cookie.save(ignore_discard=True,ignore_expires=True)


save函数参数ignore_discard的意思是即使cookies将被丢弃也将它保存下来,ignore_expires的意思是如果在该文件中 cookies已经存在,则覆盖原文件写入。

5.从cookie文件夹在cookie

#coding=utf-8
import urllib2
import cookielib


cookie=cookielib.MozillaCookieJar()
cookie.load("C:\Users\Administrator\Desktop\wanlei\cookie.txt")
req=urllib2.Request("http://www.baidu.com")
opener=urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie))
response=opener.open(req)
print response.read()

6.下面是个例子,登陆我们学校的服务器

def login():
number="2014241177"
pwd="*********"
data={"email":email,"passworld":pwd}
#将post消息化成可以让服务器编码的方式
post_data=urllib.urlencode(data)
cj=cookielib.CookieJar()
opener=urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
headers={"User-agent":"Mozilla/4.0 (compatible;MSIE 6.0; Windows NT 5.1)"}
website="http://myportal.sxu.edu.cn/login.portal"
req=urllib2.Request(website,post_data,headers)
content=opener.open(req)
print content.read()
login()


http://python.jobbole.com/81359/




0 0
原创粉丝点击