换到Python3后发现实现登录后访问网页轻松了不少,而且逻辑也更清晰了。

简单来说像这样:

import http.cookiejar
import urllib.request

cj = http.cookiejar.CookieJar()
opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cj))
r = opener.open("http://example.com/")

其中:

cj = http.cookiejar.CookieJar()

创建一个用来存储cookie的对象

urllib.request.HTTPCookieProcessor(cj)

将这个对象加载到urllib模块

opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cj))

构造使用这个cookiejaropener

r = opener.open("http://example.com/")

只是一个非常简单的例子,实际上一般是用open()函数执行一个Request对象,比如:

get = urllib.request.Request(
    url='http://' + host, headers=headers, method='GET')
con = dealer.open(get).read().decode('gbk')

另外,只要使用的cookiejar不变,就可以构建无数多个openeropener构建好后就不再需要分神去处理cookie问题了,只需要专注于发送网页请求,对网页进行处理之类的了。

http.cookiejar实际包含很多有用的功能,比如存储cookie到文件,从文件加载cookie,这样可以实现很多意想不到的功能。