python爬虫笔记(三):Cookie

Cookie的获取保存

一、使用Cookie

Cookie,指某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密)。
有些网站需要登录后才能访问某个页面,因此我们需要模拟登陆的状态来爬取数据。使用Cookie和使用代理IP一样,也需要创建一个自己的opener。在HTTP包中,提供了cookiejar模块,用于提供对Cookie的支持。

http包有四个模块

http.client is a low-level HTTP protocol client; for high-level URL opening use urllib.request
http.server contains basic HTTP server classes based on socketserver
http.cookies has utilities for implementing state management with cookies
http.cookiejar provides persistence of cookies

我们将使用 http.cookiejar模块。利用本模块的CookieJar类的对象来捕获cookie并在后续连接请求时重新发送,可以实现模拟登录功能。该模块主要的对象有CookieJar、FileCookieJar、MozillaCookieJar、LWPCookieJar。
FileCookieJar 是 CookieJar的子类,MozillaCookieJar、LWPCookieJar 是 FileCookieJar的子类。
具体步骤:创建一个带有cookie的opener,在访问登录的URL时,将登录后的cookie保存下来,然后利用这个cookie来访问其他网址。查看登录之后才能看到的信息。


1) 将Cookie保存到变量,需要保持登陆状态
mycookie = cookiejar.CookieJar()
#声明一个CookieJar对象实例来保存cookie
handler = request.HTTPCookieProcessor(mycookie)
#利用urllib.request库的HTTPCookieProcessor对象来创建cookie处理器,也就CookieHandler
opener = request.build_opener(handler)
response = opener.open("https://www.baidu.com/")
#此处的open方法打开网页
for item in mycookie:
    print("Name:{}".format(item.name))
    print("Value:{}".format(item.value))

结果:
Name:BIDUPSID
Value:BBF8A...
Name:PSTM
Value:153...
Name:BD_NOT_HTTPS
Value:...
2) 将cookie保存到文件并读取

1. 使用 FileCookieJar 实现

filename = 'cookie.txt'
cookie = cookiejar.MozillaCookieJar(filename)
# 声明一个MozillaCookieJar对象实例来保存cookie,之后写入文件
handler=request.HTTPCookieProcessor(cookie)
opener = request.build_opener(handler)
response = opener.open('http://www.baidu.com')
cookie.save(ignore_discard=True, ignore_expires=True)
# 保存cookie到文件
# ignore_discard的意思是即使cookies将被丢弃也将它保存下来;
# ignore_expires的意思是如果在该文件中cookies已经存在,则覆盖原文件写入。

2. 还可以使用 selenium 获取 Cookie

from selenium import webdriver

driver = webdriver.Chrome()
url = "http://www.baidu.com"
driver.get(url)
# 获取cookie列表
cookie_list = driver.get_cookies()
# 格式化打印cookie
cookie_dict = {}
for cookie in cookie_list:
    cookie_dict[cookie['name']] = cookie['value']
print(cookie_dict)

如果报错应该是浏览器驱动的问题
参考链接 https://blog.csdn.net/qq_30175203/article/details/51611455


3. 从文件读取cookie

filename = 'cookie.txt'
cookie = cookiejar.MozillaCookieJar()
# 从文件中读取cookie内容到变量
cookie.load(filename, ignore_discard=True, ignore_expires=True)
handler=request.HTTPCookieProcessor(cookie)
opener = request.build_opener(handler)
response = opener.open('http://www.baidu.com')
print(response.read().decode('utf-8'))

你可能感兴趣的:(python爬虫)