Форум сайта python.su
Пытаюсь открыть страничку сайта, передав ей заранее полученные cookie (автоматически “залогиниться” на сайте). Не подумайте плохого - это не спам-робот :), просто хочу автоматически прочитать новости, воспользовавшись своими существующими учётными данными.
Сайт - http://www.nnm.ru
# -*- coding: utf-8 -*- import codecs, sys, os from BeautifulSoup import BeautifulSoup import urllib, urllib2 import binascii import datetime, re sys.stdout = codecs.getwriter('cp866')(sys.stdout, errors='replace') # логин, получение cookie params = urllib.urlencode({'login' : 'Vasya', 'passwd' : 'Pass'}) # создаём объект запроса req = urllib2.Request('http://www.nnm.ru', params) # получаем файловый объект странички f = urllib2.urlopen(req) # получаем http-заголовок с cookies cookie = unicode(f.headers['Set-Cookie'], 'cp1251') print cookie # получаем значение cookie (id сессии) matches = re.findall('PHPSESSID=(.*?); ', cookie) cookie = matches[0] print cookie req = urllib2.Request('http://www.nnm.ru') req.add_header("Cookie", "PHPSESSID=" + cookie + ";") f = urllib2.urlopen(req) print f.read().decode('cp1251')
Офлайн
Я так глубоко работу с куки не знаю, поэтому пользуюсь стандартным модулем cookielib ;)
import cookielib, urllib2, urllib
cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
request0 = urllib2.Request('http://nnm.ru', None, {"User-Agent": "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.8) Gecko/20071008 Firefox/2.0.0.8"})
handle0 = opener.open(request0, urllib.urlencode({'login' : '***','passwd' : '***'}))
data = handle0.read()
handle0.close()
file('tst.htm', 'w').write(data)
Отредактировано (Май 21, 2008 20:33:24)
Офлайн
а еще - если я не ошибаюсь, вроде там rss отдают (по крайней мере доки точно отдают).
Офлайн
shiza
Спасибо, но не понял до конца, как этим правильно пользоваться. Заглавную страничку сайта я твоим способом открыл вроде без проблем, но вот дальше - непонятно. Например:
# -*- coding: utf-8 -*- import codecs, sys, os from BeautifulSoup import BeautifulSoup import urllib, urllib2, cookielib import binascii import datetime, re sys.stdout = codecs.getwriter('cp866')(sys.stdout, errors='replace') cookieJar = cookielib.CookieJar() opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookieJar)) request0 = urllib2.Request('http://luxter.nnm.ru/zenit_chempion_', None, {"User-Agent": "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.8) Gecko/20071008 Firefox/2.0.0.8"}) handle0 = opener.open(request0, urllib.urlencode({'login' : '***','passwd' : '***'})) data = handle0.read() handle0.close() print data.decode('cp1251')
Офлайн
shizaВ том-то и дело, что отдают конкретные доки. А я пытаюсь разобрать URL наподобие такого:
а еще - если я не ошибаюсь, вроде там rss отдают (по крайней мере доки точно отдают).
Офлайн
После залогинивания - срабатывает редирект на http://nnm.ru/index.html (т.е. на главную).
Поэтому надо считывать инфу в два запроса: в первом запросе мы логинимся и получаем куки, во втором запросе мы с этой кукой считываем нужную странчику.
import cookielib, urllib2, urllib
cj = cookielib.CookieJar() #создаем куки обработчик и кукихранилище в одном лице
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj)) #делаем опенер с поддержкой куки
#первый запрос - логинимся и получаем куки
request0 = urllib2.Request('http://nnm.ru', None, {"User-Agent": "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.8) Gecko/20071008 Firefox/2.0.0.8"})
handle0 = opener.open(request0, urllib.urlencode({'login' : '***','passwd' : '***'}))
data0 = handle0.read()
handle0.close()
#второй запрос - получаем нужную инфу
request1 = urllib2.Request('http://luxter.nnm.ru/zenit_chempion_', None, {"User-Agent": "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.8) Gecko/20071008 Firefox/2.0.0.8"})
handle1 = opener.open(request1)
data1 = handle1.read()
file('tst.htm', 'w').write(data1)
Отредактировано (Май 22, 2008 11:31:58)
Офлайн
Спасибо, заработало!
Офлайн