我需要通过Python脚本访问几个HTML页面,问题是我需要COOKIE功能,因此简单的urllib HTTP请求将无法工作。
有什么想法吗?
答案 0 :(得分:14)
结帐Mechanize。 “Python中有状态的程序化网页浏览” 它自动处理cookie。
import mechanize
br = mechanize.Browser()
resp = br.open("http://www.mysitewithcookies.com/")
print resp.info() # headers
print resp.read() # content
mechanize还公开了urllib2 API,默认情况下启用了cookie处理。
答案 1 :(得分:3)
cookielib module为HTTP客户端提供cookie处理。
cookielib模块定义了自动处理HTTP cookie的类。它对于访问需要小数据的网站(cookie)非常有用,可以通过来自Web服务器的HTTP响应在客户端计算机上设置,然后在以后的HTTP请求中返回到服务器。
文档中的示例显示了如何结合urllib
处理Cookie:
import cookielib, urllib2
cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
r = opener.open("http://example.com/")
答案 2 :(得分:2)
这是做cookie的东西,作为奖励对需要用户名和密码的网站进行身份验证。
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 :(得分:0)
为什么不为此尝试Dryscrape:
Import dryscrape as d
d.start_xvfb()
Br = d.Session()
Br.visit('http://URL.COM')
#open webpage
Br.at_xpath('//*[@id = "email"]').set('user@enail.com')
#finding input by id
Br.at_xpath('//*[@id = "pass"]').set('pasword')
Br.at_xpath('//*[@id = "submit_button"]').click()
#put id of submit button and click it
您不需要cookie lib存储cookie只需安装Dryscrape并以您的风格进行操作