Стандартная библиотека питона для работы с вебом - urllib2, позволяет с помощью использования различных хэндлеров добавлять различный функционал. Будь то обработка ssl, работа с cookies либо какие-то расширения http протокола. А если есть работа с cookies, то значит можно авторизироваться на различных сайтах и ходить по “закрытой” их части :)
Для примера, залогинимся на лоре
Сначала нам требуется создать объект, который будет хранить наши куки, этот объект создается из библиотеки cookielib
import cookielib
cookie = cookielib.CookieJar()
После этого, создаем объект opener из urllib2, собственно, для общения по протоколу http с добавлением cookie хэндлера
import urllib2
req = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie))
Чтобы не было проблем с некоторыми веб-серверами, добавим юзер агент, пораспространеннее
req.addheaders = [('User-Agent', 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en-US; rv:1.9.2.11) Gecko/20101012 Firefox/3.6.11'), ]
и установим наш opener как глобальный (необязательно)
urllib2.install_opener(self.req)
После этого, надо открыть страницу по определенному адресу и передать туда параметры соответственно формы авторизации.
Чтобы определить адрес, на который отправлять данные, а также, как поля формы называется, надо открыть исходники html страницы и найти форму авторизации. Для примера, на lor она выглядит так:
Имя:
Пароль:
Из формы нам требуется адрес из тэга <form> и его аттрибут action, здесь он login.jsp, что значит адрес для отправки будет http://linux.org.ru/login.jsp
Данные, которые надо отправлять смотрим в тэгах <input> и аттрибут name, здесь нам потребуются nick и passwd.
Итак, теперь попробуем залогиниться:
resp = req.open('http://linux.org.ru/index.jsp', urllib.urlencode({'nick':'username', 'passwd':'password'}))
В объекте resp лежит код, который нам отправил веб-сервер, если это 200, то значит все прошло хорошо (обычно это так :)
Также, можем проверить объект cookies и увидеть, что там появился номер сессии
print cookie
cookielib.CookieJar[Cookie(version=0, name='JSESSIONID', value='01626E21D72D336E302F5702AFE208A',
Чтобы прочитать содержимое страницы, используем resp.read()
Все, теперь используя объект resp мы можем ходить по сайту с куками и авторизованными