Найти - Пользователи
Полная версия: авторизация и cookie
Начало » Python для новичков » авторизация и cookie
1 2
reclosedev
asilyator
requests базируется на httplib и с проксями тоже не дружит.
В какой-то теме уже спрашивал, что там не так? Вроде все работает:
# -*- coding: utf-8 -*-
import requests
from requests.auth import HTTPProxyAuth
 
proxies = {'http': 'http://192.168.0.50:8080',
           'https': 'http://192.168.0.50:8080'}
            
auth = HTTPProxyAuth('username', 'mypassword')  # если нужно
s = requests.session(proxies=proxies, auth=auth)
print s.get('http://ya.ru').content
asilyator
В общем случае - неправда, особенно если не иметь отношения к веб-разработке.
Да, но если один раз освоить XPath и CSS селекторы, желание возвращаться к регулярками отпадет.
boris_blade
переписываю все под requests

Итак вот имею
def get_method_url():
        s = requests.session()
        s.get(url)
        r = s.get(url)
        return r.text
def get_javax_faces():
        javalue = re.findall(r'name="javax.faces.ViewState" id="javax.faces.ViewState" value="(.*?)"', get_method_url())
        javalue1 = re.findall(r'name="javax.faces.ViewState" id="javax.faces.ViewState" value="(.*?)"', get_method_url())
        javalue2 = re.findall(r'name="javax.faces.ViewState" id="javax.faces.ViewState" value="(.*?)"', get_method_url())
        javalue3 = re.findall(r'name="javax.faces.ViewState" id="javax.faces.ViewState" value="(.*?)"', get_method_url())
        print javalue[0]
        print javalue1[0]
        print javalue2[0]
        print javalue3[0]
        return javalue

И получаю

6348747771018317322:5767532781432039176
-3503099881244293878:4103058380486926715
-5837411956001929196:-1192284958002050963
-3087026917267320022:-4140725967561319013

То есть совершенно разные значения.
Очевидно, что get_method_url каждый раз заново запрашивает странику.
Как этого избежать?




P.S.
Регулярку я использовал просто потому что написал ее меньше чем за минуту, а не потому что так удобнее или еще что.
reclosedev
boris_blade
Очевидно, что get_method_url каждый раз заново запрашивает странику.
Как этого избежать?
Очевидно, что написать так, чтобы она этого не делала.

Пишу без кода специально, чтобы сами разобрались:
- создаем сессию один(!) раз, сохраняя ее как атрибут или глобально,
- получаем страницу один раз используя уже созданную сессию,
- парсим значение1 из скачанной страницы,
- парсим значение2 и т.д из скачанной страницы,
- делаем со значениями, что хотим.

- для последующих запросов используем сохраненную сессию.


boris_blade
reclosedev
boris_blade
Очевидно, что get_method_url каждый раз заново запрашивает странику.
Как этого избежать?

- создаем сессию один(!) раз, сохраняя ее как атрибут или глобально,


Так в том-то и дело, что я не знаю, что прочитать, чтобы разобраться.
asilyator
reclosedev
Да, но если один раз освоить XPath и CSS селекторы, желание возвращаться к регулярками отпадет.
А если толком не освоить - не отпадет, тем более, что посроение дерева медленнее регулярок. Там, где можно обойтись регуляркой - вполне можно именно ей и обойтись.

boris_blade
Так в том-то и дело, что я не знаю, что прочитать, чтобы разобраться.
s должна сохраняться между вызовами.
py.user.next
asilyator
А если толком не освоить - не отпадет, тем более, что посроение дерева медленнее регулярок.
регулярки легко ломаются, так как у них плоский анализ
есть html.parser
boris_blade
Регулярки-нерегулярки, но кто-нибудь скажет все же как же сохранить сессию и работать за тем только в ней?

Я даже не знаю, что прочитать на эту тему, на какие примеры посмотреть.
reclosedev
boris_blade
как же сохранить сессию и работать за тем только в ней?

Из обрывков вашего кода, вообще непонятно как он работает. Если я правильно понял вопрос, вот пример (для простоты с глобальной переменной):
# создаем сессию один раз и сохраняем в глобальной переменной session
session = requests.Session() # если нужно добавить опции для сессии, делаем это при создании
def do_login(login_url, user, password):
    # используем сессию из глобальной переменной для получения страницы логина
    login_page = session.get(login_url).text #
    # выдираем значение/значения (условно)
    values = re.findall('some funky regexs', login_page )
    # делаем пост запрос для логина
    return session.post(login_url, data={'user': user, 'password': password, 'some_value': values[0]})
 
# в других функциях, тоже используем session
def do_something_else(another_url):
    session.get(another_url)

Так же можно сессию хранить или как атрибут экземпляра класса или передавать как параметр:
def do_login(session, url, ...):
....
do_login(session, 'http://...', ...)
asilyator
py.user.next
регулярки легко ломаются, так как у них плоский анализ
А если надо проверить наличие нужного текста на странице? Таблицы ими, понятное дело, не распарсишь.

py.user.next
asilyator
А если надо проверить наличие нужного текста на странице? Таблицы ими, понятное дело, не распарсишь.
знаешь, бывают данные в скриптах прямо записаны
и нужно точно знать, что ты не в скрипте ищешь
надёжная вещь должна понимать, что она ищет данные там, где надо
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB