Форум сайта python.su
0
помогите пожалуйста разобраться с авторизацией при помощи скрипта. после чтения архива этого форума и гугления понял примерно следующее:
до появления библиотеки request использовалась библиотека urllib. обычно приходилось смотреть исходный код формы авторизации, составлять словарь, состоящий изадреса отправки формы, значения из скрытого поля, логина, пароля. но после появления библиотеки request авторизация стала проще(необходимы только пароль и логин). скрипт выглядит так
import urllib import pprint import re import requests import bs4 r = requests.get('http://forum.saransk.ru/', auth=('sergey', 'passpass')) print(r.status_code) print(r) url = 'http://forum.saransk.ru/' html = urllib.request.urlopen(url).read().decode('utf-8') soup = bs4.BeautifulSoup(html) signLink = soup.find('a', {'id': 'sign_in'}) if signLink: print(signLink.prettify())
>>> ================================ RESTART ================================
>>>
200
<Response >
<a href="http://forum.saransk.ru/index.php?app=core&module=global&section=login“ id=”sign_in“ title=”Войти">
Войти
</a>
Офлайн
19
Потому что не смотря на то что вы пробовали авторизоваться есть ссылка на странице которую вы ищете. Авторизация там походу просто не работает, по крайней мере мне не удалось войти ни запросом, ни формой, не помогло даже сбросить пароль.
Офлайн
0
сама авторизация там работает. я несколько лет тем форумом пользуюсь, авторизуюсь каждый день. сейчас вот решил попробовать авторизоваться при помощи скрипта…
Офлайн
20
Рабочий вариант (у меня работает):
from grab import Grab g=Grab() g.go("http://forum.saransk.ru/") g.go(g.doc.select("//*[@id='sign_in']").attr("href")) g.set_input_by_id("ips_username","Nickname") g.set_input_by_id("ips_password","password") g.submit()
print g.doc.select("//*[@id='user_link']").text()
Отредактировано noob_saibot (Фев. 22, 2014 09:14:57)
Офлайн
0
не обязательно с помощью request(я даже думаю, что с request сложнее будет запись). спасибо
UPD
погуглил и увидел, что grab работает только на 2 питоне. а у меня 3 версия(((
Отредактировано zlodiak (Фев. 22, 2014 10:13:50)
Офлайн
20
А у меня другая информация:
https://bitbucket.org/lorien/grab/issue/61/grab-python-3
Офлайн
0
я читал. это не официальный релиз. мало ли там какие глюки возможны. если в ходе работы над проектом что-нибудь всплывёт, то мне с моими знаниями придётся закрыть проект
Отредактировано zlodiak (Фев. 22, 2014 11:42:26)
Офлайн
20
1) Можете воспользоваться другими библиотеками.
2) Поставить питон 2.7
3) Поставить граб на 3.3.
На выбор
Вам же надо было только регистрацию, а тут проект?
Офлайн
0
всё оказалось до смешного просто. тут дела то на 5 минут))
так как вопрос популярный, то опубликую решение. может быть мой код поможет очередному вопрошающему
import pprint import requests import bs4 url = 'http://forum.saransk.ru/' html = requests.get(url) soup = bs4.BeautifulSoup(html.text) loginForm = soup.find('form', {'id': 'login'}) hiddenAuthKey = soup.find('input', {'name': 'auth_key'})['value'] authData = { 'ips_username': 'йцукен', 'ips_password': 'йцукен', 'auth_key': hiddenAuthKey, 'rememberMe': 1, 'referer': 'http://forum.saransk.ru/' } pprint.pprint(authData) cookies = dict(invbf_session_id='2412121525sdg') pprint.pprint(cookies) req = requests.get(url, params=authData, cookies=cookies) soup = bs4.BeautifulSoup(req.text) signLinkNotLogged = soup.find('a', {'id': 'sign_in'}) if signLinkNotLogged: print('not_enter') else: print('enter')
Отредактировано zlodiak (Фев. 22, 2014 19:28:54)
Офлайн
0
по этому вопросу я снова прошу помощи у вашего сообщества. в предыдущем сообщении я опубликовал код, с помощью которого можно авторизоваться на форуме типа IPB. но в этот код приходится каждый раз ручками вставлять id сессии. в нижеследующем коде я попытался автоматизировать этот процесс:
import pprint import requests import re import shelve import bs4 def scanning_posts(): print('------------------------enter begin--------------------') url = 'http://forum.saransk.ru/' html = requests.get(url) pprint.pprint(html.headers) rawCookie = html.headers['Set-Cookie'] cookie = re.search(r"invbf_session_id=(.*?);", rawCookie).group(1) pprint.pprint(cookie) html = requests.get(url) soup = bs4.BeautifulSoup(html.text) loginForm = soup.find('form', {'id': 'login'}) hiddenAuthKey = soup.find('input', {'name': 'auth_key'})['value'] authData = { 'ips_username': 'xxxxxx', 'ips_password': 'xxxxxx', 'auth_key': hiddenAuthKey, 'rememberMe': 1, 'referer': 'http://forum.saransk.ru/' } #pprint.pprint(authData) print('\tlogin: ', authData['ips_username']) cookie = dict(invbf_session_id=cookie) req = requests.post(url, params=authData, cookies=cookie) soup = bs4.BeautifulSoup(req.text) signLinkNotLogged = soup.find('a', {'id': 'sign_in'}) if signLinkNotLogged: print('------------------------enter failed--------------------') scanning_posts()
pprint.pprint(cookie)
Отредактировано zlodiak (Фев. 24, 2014 11:04:15)
Офлайн