浏览器模拟 - Python

11 投票
4 回答
22132 浏览
提问于 2025-04-15 21:10

我需要通过一个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 处理。

撰写回答