Я должен получить доступ к нескольким страницам HTML через сценарий Python, проблема состоит в том, что мне нужна функциональность COOKIE, поэтому простой urllib Запрос HTTP не будет работать.
Какие-либо идеи?
посмотрите Mechanize. "Программируемый просмотр веб-страниц на языке Python".
Он автоматически обрабатывает куки.
import mechanize
br = mechanize.Browser()
resp = br.open("http://www.mysitewithcookies.com/")
print resp.info() # headers
print resp.read() # content
Mechanize также предоставляет API urllib2, в котором обработка cookie включена по умолчанию.
Вот что-то, что делает файлы 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")
Модуль cookielib обеспечивает обработку файлов cookie для клиентов HTTP.
Модуль cookielib определяет классы для автоматической обработки файлов cookie HTTP. Это полезно для доступа к веб-сайтам, которым требуются небольшие фрагменты данных - файлы cookie - которые должны быть установлены на клиентском компьютере посредством HTTP-ответа от веб-сервера, а затем возвращены на сервер в последующих HTTP-запросах.
Примеры в документе показывают, как обрабатывать файлы cookie вместе с urllib
:
import cookielib, urllib2
cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
r = opener.open("http://example.com/")