浏览器模拟 - Python
我需要通过一个Python脚本访问几个HTML页面,但问题是我需要使用COOKIE功能,所以简单的urllib HTTP请求是行不通的。
有没有什么好的办法?
4 个回答
2
这里有一些关于处理 cookies 的内容,顺便还提供了一个可以用来进行身份验证的例子,适用于需要用户名和密码的网站。
import urllib2
import cookielib
import string
def cook():
url="http://wherever"
cj = cookielib.LWPCookieJar()
authinfo = urllib2.HTTPBasicAuthHandler()
realm="realmName"
username="userName"
password="passWord"
host="www.wherever.com"
authinfo.add_password(realm, host, username, password)
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj), authinfo)
urllib2.install_opener(opener)
# Create request object
txheaders = { 'User-agent' : "Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)" }
try:
req = urllib2.Request(url, None, txheaders)
cj.add_cookie_header(req)
f = urllib2.urlopen(req)
except IOError, e:
print "Failed to open", url
if hasattr(e, 'code'):
print "Error code:", e.code
else:
print f
print f.read()
print f.info()
f.close()
print 'Cookies:'
for index, cookie in enumerate(cj):
print index, " : ", cookie
cj.save("cookies.lwp")
3
cookielib模块是用来处理HTTP客户端的cookie的。
cookielib模块定义了一些类,可以自动处理HTTP的cookie。这对于访问那些需要在客户端机器上设置小数据片段——也就是cookie——的网站很有用。这些cookie是通过网页服务器的HTTP响应设置的,之后在后续的HTTP请求中再返回给服务器。
文档中的例子展示了如何与urllib
一起处理cookie:
import cookielib, urllib2
cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
r = opener.open("http://example.com/")
18
看看这个 Mechanize。它是“在Python中进行有状态的程序化网页浏览”。
它会自动处理 cookies。
import mechanize
br = mechanize.Browser()
resp = br.open("http://www.mysitewithcookies.com/")
print resp.info() # headers
print resp.read() # content
mechanize 还提供了 urllib2 的接口,并且默认开启了 cookie 处理。