这里的爬虫知识学习十分基础,都是按照http://cuiqingcai.com/968.html逐步学习的。不过原网页是Python2.7的代码,这里改成了Python3.5版本。
Cookie,指某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密)。比如说有些网站需要登录后才能访问某个页面,在登录之前,想抓取某个页面内容是不允许的。那么我们可以保存我们登录的Cookie,然后再抓取其他页面就达到目的了。
1. Opener
当获取一个URL使用一个opener。在前面,使用的默认的opener,也就是urlopen。它是一个特殊的opener,可以理解成opener的一个特殊实例,传入的参数仅仅是url,data,timeout。如果需要用到Cookie,只用这个opener是不能达到目的的,所以需要创建更一般的opener来实现对Cookie的设置。
2.Cookielib
Cookielib模块主要功能是提供可存储cookie的对象。使用此模块捕获cookie并在后续连接请求时重新发送,还可以用来处理包含cookie数据的文件。这个模块主要提供了这几个对象,CookieJar,FileCookieJar,MozillaCookieJar,LWPCookieJar。
1)获取Cookie保存到变量。利用CookieJar对象实现获取cookie的功能,存储到变量中。
import urllib.request
import http.cookies
import http.cookiejar
cookie = http.cookiejar.CookieJar()
handler = urllib.request.HTTPCookieProcessor(cookie)
opener = urllib.request.build_opener(handler)
response = opener.open('http://www.baidu.com')
for item in cookie:
print('Name =' + item.name)
print('Value =' + item.value)
在上面的方法中,cookie被保存到了cookie这个变量中,如果想将cookie保存到文件中就要用到FileCookieJar这个对象了,在这里使用它的子类MozillaCookieJar来实现Cookie的保存。
filename = 'cookie.txt'
cookie = http.cookiejar.MozillaCookieJar(filename)
handler = urllib.request.HTTPCookieProcessor(cookie)
opener = urllib.request.build_opener(handler)
response = opener.open('http://www.baidu.com')
cookie.save(ignore_discard=True, ignore_expires=True)
save方法的两个参数:ignore_discard的意思是即使cookies将被丢弃也将它保存下来,ignore_expires的意思是如果在该文件中cookies已经存在,则覆盖原文件写入,运行之后,cookies将被保存到cookie.txt文件中,内容如下:
3)从文件中获取Cookie并访问
已经做到把Cookie保存到文件中了,如果以后想使用,可以利用下面的方法来读取cookie并访问网站:
cookie = http.cookiejar.MozillaCookieJar() cookie.load('cookie.txt',ignore_discard=True, ignore_expires=True) request = urllib.request.Request("http://www.baidu.com") handler = urllib.request.HTTPCookieProcessor(cookie) opener = urllib.request.build_opener(handler) response = opener.open(request) print(response.read())
参考: http://cuiqingcai.com/968.html