所以我有一个工作代码,可以从网站获取数据,必要时连接到它,并将cookie保存在文件中,以便每次启动代码时它们都会保留。这是代码的样子(显然我删除了导入和大部分代码以使其更具可读性)
cookiejar_file = 'tmp/cookies.txt'
cj = http.cookiejar.LWPCookieJar(cookiejar_file)
try:
cj.load(ignore_discard=True)
except:
pass
s = requests.Session()
s.cookies = cj
# Do stuff, connect if necessary by doing a s.post() on the connect page
cj.save(cookiejar_file, ignore_discard=True)
但是现在我正在尝试创建一个更干净的类来完成这项工作存在一个问题:每次运行代码时它都必须再次连接到网站。所以我一定做错了什么,而且我没想成功加载cookie?
class Parent:
CookieFile = 'tmp/cookies.txt'
def __init__(self):
self.cj = http.cookiejar.LWPCookieJar(Parent.CookieFile)
self.cj.load()
self.session = requests.Session()
self.session.cookies = self.cj
def save_cookies(self):
self.cj.save(Parent.CookieFile, ignore_discard=True)
class Child(Parent):
def __init__(self):
Parent.__init__(self)
def main(self):
# Do stuff, connect if necessary
self.save_cookies()
a = Child
a.main()
我这样做的方式有问题吗?对我来说,它看起来应该做同样的事情。 第一次执行代码时cookie文件已成功创建,每次执行时cookie都会更改。
答案 0 :(得分:1)
问题很简单,我忘记了" ignore_discard = True"当我加载Cookiejar时。
这与Python 3.5.1和请求2.9.1完美配合:
import requests
import http.cookiejar
class Parent:
CookieFile = 'tmp/cookies.txt'
def __init__(self):
self.cj = http.cookiejar.LWPCookieJar(Parent.CookieFile)
self.cj.load(ignore_discard=True)
self.session = requests.Session()
self.session.cookies = self.cj
def save_cookies(self):
self.cj.save(Parent.CookieFile, ignore_discard=True)
class Child(Parent):
def __init__(self):
Parent.__init__(self)
def main(self):
# Do stuff, connect if necessary
self.save_cookies()
a = Child
a.main()