Если сеанс запросов python можно сохранить в базе данных? [Дубликат]

Модуль проверяет, что осталось от деления.

Если $ i равно 10, 10/2 = 5 без остатка, то модуль $ i будет равен 0. Если $ i равно 10, 10/3 = 3 с остатком 1, то $ i модулем 3 будет 1.

. Чтобы вам было легче отслеживать количество элементов, я начинал бы $ i с 1 вместо 0. например

for($i=1; $i <= $count; $i++)
    if($i % 2 == 0) echo 'This number is even as it is divisible by 2 with no leftovers! Horray!';

Надеюсь, что его понятно. Шай.

28
задан Jeremy 25 November 2012 в 09:22
поделиться

8 ответов

Я предлагаю путь json:

# to save cookie
import json
with open('cookie.txt', 'w') as f:
    json.dump(requests.utils.dict_from_cookiejar(bot.cookies), f)

и

# to load cookie
import json
with open('cookie.txt', 'r') as f:
    cookie = requests.utils.cookiejar_from_dict(json.load(f))
3
ответ дан BohanZhang 27 August 2018 в 06:07
поделиться

Нет прямого способа сделать это, но это не сложно.

Вы можете получить объект CookieJar из сеанса как session.cookies. Вы можете использовать requests.utils.dict_from_cookiejar , чтобы преобразовать его в dict. Затем вы можете использовать pickle , чтобы сохранить его в файле (вы также можете использовать shelve , если вам нужно сохранить несколько вещей).

Полный пример:

import requests, requests.utils, pickle
session = requests.session()
# Make some calls
with open('somefile', 'w') as f:
    pickle.dump(requests.utils.dict_from_cookiejar(session.cookies), f)

Загрузка выполняется тогда:

with open('somefile') as f:
    cookies = requests.utils.cookiejar_from_dict(pickle.load(f))
    session = requests.session(cookies=cookies)
39
ответ дан Delyan 27 August 2018 в 06:07
поделиться

После вызова, такого как r = requests.get(), r.cookies вернет RequestsCookieJar, который вы можете непосредственно pickle , то есть

import pickle
def save_cookies(requests_cookiejar, filename):
    with open(filename, 'wb') as f:
        pickle.dump(requests_cookiejar, f)

def load_cookies(filename):
    with open(filename, 'rb') as f:
        return pickle.load(f)

#save cookies
r = requests.get(url)
save_cookies(r.cookies, filename)

#load cookies and do a request
requests.get(url, cookies=load_cookies(filename))

Если вы хотите для сохранения ваших файлов cookie в удобном для чтения формате, вам нужно выполнить некоторую работу, чтобы извлечь RequestsCookieJar в LWPCookieJar .

import cookielib
def save_cookies_lwp(cookiejar, filename):
    lwp_cookiejar = cookielib.LWPCookieJar()
    for c in cookiejar:
        args = dict(vars(c).items())
        args['rest'] = args['_rest']
        del args['_rest']
        c = cookielib.Cookie(**args)
        lwp_cookiejar.set_cookie(c)
    lwp_cookiejar.save(filename, ignore_discard=True)

def load_cookies_from_lwp(filename):
    lwp_cookiejar = cookielib.LWPCookieJar()
    lwp_cookiejar.load(filename, ignore_discard=True)
    return lwp_cookiejar

#save human-readable
r = requests.get(url)
save_cookies_lwp(r.cookies, filename)

#you can pass a LWPCookieJar directly to requests
requests.get(url, cookies=load_cookies_from_lwp(filename))
23
ответ дан dtheodor 27 August 2018 в 06:07
поделиться

Расширяясь в ответе @ miracle2k, запросы Session s документированы для работы с любым cookielib CookieJar. LWPCookieJarMozillaCookieJar) могут сохранять и загружать файлы cookie в файл и из него. Вот полный фрагмент кода, который будет сохранять и загружать файлы cookie для сеанса запросов. Параметр ignore_discard используется для работы с httpbin для теста, но вы можете не захотеть включить его в настоящий код.

import os
from cookielib import LWPCookieJar

import requests


s = requests.Session()
s.cookies = LWPCookieJar('cookiejar')
if not os.path.exists('cookiejar'):
    # Create a new cookies file and set our Session's cookies
    print('setting cookies')
    s.cookies.save()
    r = s.get('http://httpbin.org/cookies/set?k1=v1&k2=v2')
else:
    # Load saved cookies from the file and use them in a request
    print('loading saved cookies')
    s.cookies.load(ignore_discard=True)
    r = s.get('http://httpbin.org/cookies')
print(r.text)
# Save the session's cookies back to the file
s.cookies.save(ignore_discard=True)
20
ответ дан gazpachoking 27 August 2018 в 06:07
поделиться

Ответ dtheodor получил 95%, кроме этого:

session = requests.session(cookies=cookies)

Для меня это вызывает исключение, поскольку session () не принимает аргументы.

Я работал вокруг него взяв ключи / значения в файле cookie.get_dict и добавив их вручную в сеанс, используя:

session.cookies.set(cookies.keys()[n],cookies.values()[n])
2
ответ дан gtalarico 27 August 2018 в 06:07
поделиться

Вы можете непосредственно раскрыть файл cookie:

cookies = pickle.dumps(session.cookies)

Представление dict пропускает много информации: expiration, domain, path ...

Это зависит от использования вы собираетесь использовать файлы cookie, но если у вас нет информации об истечении срока действия, например, вы должны реализовать логику отслеживания срока действия вручную.

Травление возвращаемого объекта библиотеки позволяет легко восстановить состояние, то вы можете ретранслировать по реализации библиотеки.

Очевидно, что таким образом, потребитель маринованного объекта должен использовать одну и ту же библиотеку

2
ответ дан JackNova 27 August 2018 в 06:07
поделиться

Я обнаружил, что у других ответов были проблемы:

  • Они не применялись к сеансам.
  • Они не сохраняли и не загружали должным образом. Было потеряно только имя и значение файла cookie, дата истечения срока действия, имя домена и т. Д.

Этот ответ устраняет эти два вопроса:

import requests.cookies

def save_cookies(session, filename):
    if not os.path.isdir(os.path.dirname(filename)):
        return False
    with open(filename, 'w') as f:
        f.truncate()
        pickle.dump(session.cookies._cookies, f)


def load_cookies(session, filename):
    if not os.path.isfile(filename):
        return False

    with open(filename) as f:
        cookies = pickle.load(f)
        if cookies:
            jar = requests.cookies.RequestsCookieJar()
            jar._cookies = cookies
            session.cookies = jar
        else:
            return False

Затем просто вызовите save_cookies(session, filename) для сохранения или load_cookies(session, filename) для загрузки. Просто как это.

6
ответ дан MattClimbs 27 August 2018 в 06:07
поделиться

Это выполнит задание:

session.cookies = LWPCookieJar('cookies.txt')

API CookieJar требует, чтобы вы вызывали load () и save () вручную, хотя. Если вам не нужен формат cookie.txt, у меня есть реализация ShelvedCookieJar , которая будет сохраняться при изменении.

8
ответ дан miracle2k 27 August 2018 в 06:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: