这几天自己有个小需求,忙着写爬取知乎的代码,所以耽误了下,不过也正好来讲一下爬虫中关于session及cookie的运用,因为这个在爬取需要登录或者cookie值的时候会用到,其实方法挺简单的,这里我们使用常用的http里的cookiejar:
from http import cookiejar
之前我们都是用的requests库来请求url地址的,那我还是以这个来讲解,关于什么是cookie,什么是session,我就不在这里一一说明了,有兴趣的童鞋可以看下基础,那下面就说下cookiejar的用法,我就拿最近请求知乎的代码的片段说下:
#定义session
self.session=requests.session()
# 设置cookie信息
self.session.cookies = cookiejar.LWPCookieJar(filename='zh_cookie.txt')
上面2行是先设置好cookie信息,定义的self.session,这个是我自己定义的一个类文件里的初始化方法里,所以用到self,这个之前的文章有讲过,cookiejar.LWPCookieJar里面有3个参数,filename是存放cookie的文件,简写的话你可以去掉filename=;
通常一般的情况下接着就是加载cookie,然后判断下cookie是否加载成功:
try:
self.session.cookies.load(ignore_discard=True, ignore_expires=True)
except:
print("Cookie 未能加载")
在这load方法中ignore_discard=True的意思是说即使浏览器失效也将它读取出来,ignore_expires=True的意思说是即使cookie已过期我们也将它读取出来,接着这里就可以判断,如果没有出现Cookie 未能加载则说明cookies读取成功,你可以直接通过
self.session.get(url='http://www.zhihu.com')
这里就携带了读取的cookie去请求这个地址, 当然按照上面的操作你是肯定访问不了登陆后的页面的,因为你还没有实现登录成功后保存cookie,可以通过下面来实现:
self.session.cookies.save(ignore_discard=True, ignore_expires=True)
里面也包含了ignore_discard,ignore_expires,反正意思就是说不管失不失效,过不过期都保存到下来,保存到哪里呢,就是前面定义的zh_cookie.txt文件里,
那接下来就好操作了,如果是当你从zh_cookie.txt文件读取成功时去访问网址,如果网址无法正常访问,我们就在执行一遍登录流程,反之则直接访问成功。
就是这么简单,好了,经过这几篇的例子,用python抓取网址的基本操作差不多就这样,后面可能还会说到线程及多线程的问题,因为信息是千千万万条的,我们不可能一直用for循环一个一个慢慢的等待……
我们要压榨电脑的最大资源,缩短时间,提高效率,这样你才能获得最大的价值!
最后还是一句话,想要学得快,还是要自己多实际动手敲敲代码,分析分析过程与结果,这样你的思维在运转的时候学东西才快,
江湖不说再见,咱们下篇见!
关注公众号,一起来提高自己吧!