赞
踩
首先解释一下什么是cookie,这里借鉴mcrwayfun博主对cookie的解释。
COOKIE:
HTTP协议本身是无状态的。什么是无状态呢,即服务器无法判断用户身份。Cookie实际上是一小段的文本信息(key-value格式)。客户端向服务器发起请求,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态。
链接:https://www.jianshu.com/p/6fc9cea6daa2
在我们使用爬虫时,想要爬取例如QQ空间的页码源码会发现,即使我们对登入好的QQ空间url发送get请求,还是用post请求携带账号密码登入后再发起get请求,都不能获取到个人空间的页码源码。原因就是HTTP协议本身是无状态的,服务器无法判断用户身份。而Cookie就是记录用户状态的,发起第二次基于个人主页请求的时候,服务器端并不知道此请求是基于登入状态下的请求。
那么怎么解决呢?其实,解决办法有两个。
1、手动添加Cookie
2、使用session会话对象
这两个操作都很简单,不过手动添加Cookie不推荐,毕竟我们使用爬虫不就是想自动化吗。
我们打开开发者工具,选择网络(network),然后随便找到一个请求包点进去,再headers下面找到Cookie,最后复制。
我们只要把复制好的Cookie以字典的形式封装到headers中,和user-agent一样就行了。
可以看到一般来说Cookie都比较长,记录的都是你的行为状态,比如每个人进淘宝页面都不一样,其实就是服务器端根据你携带的Cookie,判断出你的喜好在进行推送商品。
使用这个方法就不每次都去复制Cookie的值了。
session会话对象可以进行请求发送,如果请求过程中产生了Cookie,则该Cookie会被自动存储/携带在session对象中。
具体怎么做呢,我们先创建一个session对象。
session = requests.session() #session()在requests库中 #创建好一个session对象之后的请求都是用这个session对象来发起请求,而不是requests。 img_data = session.get(url=url,headers=headers).content
注意创建好一个session对象之后,不管是get()请求,还是post()请求都要用session对象来发起请求,而不是requests。
Cookie和session都还有很多的用法和含义,这里只是稍稍说了一下在爬虫里的,如大家对其他方面感兴趣可以自行百度。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。