cookie是web主机服务器返回给客户端登陆信息的一种密钥。在爬虫时,对于需要登陆账号密码的网站,若不使用cookie,则不能获取需要的信息。当使用cookie时,客户端可以多次直接获取服务器网页信息,不必重复登陆自己的账号密码。cookie的使用分为两种,第一种:将cookie放在header信息里面,采用post的请求方式,进行网页信息的获取。例如:
import urllib.request,urllib.parse url='http://****com/' headers={'user-agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36', 'cookie':'************H_PS_PSSID=1421_21122_26350_28413; BDSFRCVID=kY-OJeC62uipAp69jB0prglYsg5rbsOTH6aV1uteHfFNlQlK3xZmEG0PeM8g0KubhaS4ogKKBeOTHn0F_2uxOjjg8UtVJeC6EG0P3J; H_BDCLCKID_SF=tJPDVI82JCD3j-5cbjAWq4tehHRWXCr9WDTm_Doa24JNqKLwMxK2KbDshbreK5QHKj79-pPKKxLaftbNy-jPX4Auh-4ehpTL3mkjbn5zfn02OP5PM-Q6j-4syPRGKxRnWI_jKfA-b4ncjRcTehoM3xI8LNj405OTt2LE3-oJqCLMbDIR3D; delPer=0; PSINO=2; ZD_ENTRY=baidu; PHPSESSID=eeoser3pl2vivvnbgn14bad960; Hm_lvt_4010fd5075fcfe46a16ec4cb65e02f04=1550109976,1550112542; BDUSS=NKTVZMQTNOZzNvVXB5bTIySDluNUFpelVNYnBMMW5EU1hTSjhOQnk1Sm9aSXhjQUFB****', 'connection':'keep-alive', 'accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8'} request=urllib.request.Request(url,headers=headers) w=urllib.request.urlopen(request).read() print(w.decode())
可以直接爬取自己账号下该网站的信息。这种方式最简单,但不实用,需要手动输入cookie信息,cookie信息的获取不介绍,打开所需要的网站,F12,F5即可查看cookie,host等headers信息。
目前主流的是将cookie信息保存到自己的客户端,然后通过调取该文件,进行爬虫。即第二种方法:建立cookie.txt文档,保存cookie,随后再使用时即可任意调用cookie.txt文件
1.保存cookie信息到本地文件:
import urllib.request,urllib.parse import http.cookiejar url='http://i.baidu.com' headers={'user-agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36', 'connection':'keep-alive', 'accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8' } cookiefile='D:/cookie.txt' cookie=http.cookiejar.MozillaCookieJar(cookiefile) #cookie.load(cookiefile,ignore_discard=True, ignore_expires=True) handler=urllib.request.HTTPCookieProcessor(cookie) opener=urllib.request.build_opener(handler) request=urllib.request.Request(url,headers=headers) response=opener.open(request) cookie.save(ignore_discard=True, ignore_expires=True) for item in cookie : print(item.name, item.value)
2.调用cookie文件进行网站访问import urllib.request,urllib.parse
import urllib.request,urllib.parse import http.cookiejar url='http://i.baidu.com' headers={'user-agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36', 'connection':'keep-alive', 'accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8' } cookiefile='D:/cookie.txt' cookie=http.cookiejar.MozillaCookieJar() cookie.load(cookiefile,ignore_discard=True, ignore_expires=True) handler=urllib.request.HTTPCookieProcessor(cookie) opener=urllib.request.build_opener(handler) request=urllib.request.Request(url,headers=headers) response=opener.open(request) for item in cookie : print(item.name, item.value)
以上是常规cookie的使用方法,在python爬虫中,针对需要通过账号密码登陆的网站,cookie信息可以较方便的爬虫,不必再输入账号、密码,类似一张通行证。但前提是提前输入账号密码登录网站,获取cookie。然后保存cookie,需要爬虫时,调用该cookie(备注,此cookie一定是登录账号后的cookie,否则进入不了需要输入账号的网站)。