现在以json为数据传输格式的RESTful接口非常流行。为调试这样的接口,一个常用的办法是使用curl命令: curl http://somehost.com/some-restful-api 对于返回的json字符串,一般在服务端不加处理的情况下,都是没有任何’\t’和’\n’的。为了方便查看,在bash上可以简单地对它进行格式化: curl http://somehost.com/some-restful-api | python…
December 27, 2018
Python 报错:“’cookies.txt’ does not look like a Set-Cookie3 (LWP) format file”和“invalid Netscape format cookies”
如果遇到
http.cookiejar.LoadError: ‘cookies.txt’ does not look like a Set-Cookie3 (LWP) format file
或
http.cookiejar.LoadError: ‘cookie.txt’ does not look like a Netscape format cookies file
的问题,
那么,原因是cookies.txt文件的内容格式不对!
不知道怎么修改,怎么办呢?
办法:把 CookieJar自己cookie.save()保存下来的文件,用notepad打开来看看,就知道格式了
例如:报错: http.cookiejar.LoadError: ‘cookie.txt’ does not look like a Netscape format cookies file
那么问题出在cookies文件上,说是不像一个Netscape格式的cookie文件。不过也好解决,只需要在cookies文件开始一行添加如下内容即可:
# Netscape HTTP Cookie File
例如:报错:http.cookiejar.LoadError: ‘cookies.txt’ does not look like a Set-Cookie3 (LWP) format file
应该是使用了类似以下的语句:
# session代表某一次连接 mySession = requests.session() # 因为原始的session.cookies 没有save()方法,所以需要用到cookielib中的方法LWPCookieJar,这个类实例化的cookie对象,就可以直接调用save方法。 mySession.cookies = cookielib.LWPCookieJar(filename = "cookies.txt")
那么问题也出在cookies文件上,只需要在cookies文件开始一行添加如下内容即可:
#LWP-Cookies-2.0
附上保存两种格式cookies.txt文件的代码:
import cookielib import urllib2 def cookies(): """保存cookies到变量 """ #声明一个CookieJar对象实例来保存cookie cookie = cookielib.CookieJar() opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie)) #此处的open方法同urllib2的urlopen方法,也可以传入request response = opener.open('http://example.webscraping.com') for item in cookie: print ('Name = '+item.name) print ('Value = '+item.value) def save_cookies_Moz(): """保存cookies到文件 —— Netscape格式 """ filename = 'cookies_Moz.txt' cookie = cookielib.MozillaCookieJar(filename) opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie)) response = opener.open("http://example.webscraping.com") cookie.save(ignore_discard=True, ignore_expires=True) # 这里必须将参数置为True,否则写入文件失败 def save_cookies_LWP(): """保存cookies到文件 —— LWP格式 """ filename = 'cookies_LWP.txt' cookie = cookielib.LWPCookieJar(filename) opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie)) response = opener.open("http://example.webscraping.com") cookie.save(ignore_discard=True, ignore_expires=True) # 这里必须将参数置为True,否则写入文件失败
参考:
Python 网络爬虫:利用requests模拟登录实例讲解, 手把手教你利用session/cookie模拟登录