首先解释一下什么是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不推荐,毕竟我们使用爬虫不就是想自动化吗。

手动添加Cookie

我们打开开发者工具,选择网络(network),然后随便找到一个请求包点进去,再headers下面找到Cookie,最后复制。

python爬虫怎么看cookie 爬虫cookies_python

我们只要把复制好的Cookie以字典的形式封装到headers中,和user-agent一样就行了。

可以看到一般来说Cookie都比较长,记录的都是你的行为状态,比如每个人进淘宝页面都不一样,其实就是服务器端根据你携带的Cookie,判断出你的喜好在进行推送商品。

使用session会话对象

使用这个方法就不每次都去复制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都还有很多的用法和含义,这里只是稍稍说了一下在爬虫里的,如大家对其他方面感兴趣可以自行百度。