在用浏览器进行网页访问时,会向网页所在的服务器发送http协议的GET或者POST等请求,在请求中除了指定所请求的方法以及URI之外,后面还跟随着一段Request Header。Request Header的内容主要用于描述本地信息,如所用的浏览器、所用的系统、语言、所能接受的返回数据的编码格式等,其中有一个非常重要的Header项就是Cookie,Cookie可以说是网站的自定义数据集。由于服务器端无法无法控制本地(浏览器)的内存数据,但服务器又有必要搜集与自己所提供的服务相关的本地状态信息,而Cookie就承载了这一功能,目的是记录用户在网站的状态信息。
在用python对网页进行访问的时候,如果希望得到与在网页端相同的结果,用该网页在浏览器中所保留的Cookie作为python的请求Cookie是一个比较值得推荐的做法。
本文主要讨论如何提取浏览器保存在本地的Cookie,所用的浏览器为Chrome。
Cookie文件
Chrome用sqlite来维护Cookie,Cookie中的信息被保存在sqlite数据库当中,如果系统为Windows,那么数据库文件所在的位置为[1]:
C:\Users\{UserName}\AppData\Local\Google\Chrome\User Data\Default\Cookies
其中该路径的{UserName}是当前系统的用户名。
- username = os.environ.get('USERNAME')
- cookie_file = 'C:\Users\{UserName}\AppData\Local\Google\Chrome\User Data\Default\Cookies'.format(UserName=username)
Cookie表单
通过Cookie文件路径,我们可以建立数据库连接,然后提取出数据库的信息。
- con = sqlite3.connect(cookie_file)
- cursor = con.cursor()
数据库中的cookies表就是用于保存浏览器Cookie的。提取表中各列的名称
- cursor.execute('SELECT * FROM cookies')
- for description in cursor.description:
- print(description[0])
各字段的描述如下
- creation_utc:Cookie产生的utc时间
- host_key:Cookie所在的网页(domain)
- name:Cookie名称
- value:不加密的Cookie值,由于Chrome几乎都会对Cookie值加密后再存储,因此这个字段基本都是空的
- path:如果服务器需要设置Cookies,那么服务器在响应浏览器请求的