Модуль проверяет, что осталось от деления.
Если $ 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!';
Надеюсь, что его понятно. Шай.
Я предлагаю путь 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))
Нет прямого способа сделать это, но это не сложно.
Вы можете получить объект 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)
После вызова, такого как 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))
Расширяясь в ответе @ miracle2k, запросы Session
s документированы для работы с любым cookielib CookieJar
. LWPCookieJar
(и MozillaCookieJar
) могут сохранять и загружать файлы 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)
Ответ dtheodor получил 95%, кроме этого:
session = requests.session(cookies=cookies)
Для меня это вызывает исключение, поскольку session () не принимает аргументы.
Я работал вокруг него взяв ключи / значения в файле cookie.get_dict и добавив их вручную в сеанс, используя:
session.cookies.set(cookies.keys()[n],cookies.values()[n])
Вы можете непосредственно раскрыть файл cookie:
cookies = pickle.dumps(session.cookies)
Представление dict пропускает много информации: expiration, domain, path ...
Это зависит от использования вы собираетесь использовать файлы 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)
для загрузки. Просто как это.
Это выполнит задание:
session.cookies = LWPCookieJar('cookies.txt')
API CookieJar требует, чтобы вы вызывали load () и save () вручную, хотя. Если вам не нужен формат cookie.txt, у меня есть реализация ShelvedCookieJar , которая будет сохраняться при изменении.