什么是cooker:

  

python爬虫设置cookie 爬虫cookies_爬虫

      Cookie是由服务器端生成,发送给User-Agent(一般是浏览器),浏览器会将Cookie的key/value保存到某个目录下的文本文件内,下次请求同一网站时就发送该Cookie给服务器(前提是浏览器设置为启用cookie)。Cookie名称和值可以由服务器端开发自己定义,对于JSP而言也可以直接写入jsessionid,这样服务器可以知道该用户是否合法用户以及是否需要重新登录等。

参数的意义:

  NAME: cookie的名字

  VALURE: cookie的值

  Exoires: cookie的过期时间

  Path: cookie作用的路径

  Domain: cookie作用的域名

  SECURE:  是否只在https协议下期起作用

 方法一:首先要获取登入后的cooker信息。



1 from urllib import request

 5 huang_url = ''
 6 
 7 headers = {
 8     'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36',
 9     'cookie': '使用自己的cooker号'
10 }
11 
12 req = request.Request(url=huang_url, headers=headers)
13 reqs = request.urlopen(req)
14 with open('bokeyuan.html', 'w', encoding='utf-8') as fp:
15     # write函数必须写入一个str 的数据类型
16     # reqs.read() 读取的是一个bytes书籍类型
17     # bytes -> decode -> str 类型之间的转换
18     # str -> encode -> bytes
19     fp.write(reqs.read().decode('utf-8'))



  每次访问都要获取cookie的页面从浏览器中复制cookie比较麻烦,在Python处理cookie,一般是通过 http.cookiejar 模块 和 urllib 模块的HTTPCookieProcessor 处理器类一起使用。http.cookiejar 模块主要作用是提供用于储存cookie的对象。而 HTTPCookieProcessor 处理器主要作用是处理这些Cookie对象,并构建handle对象。

http.cookiejar模块: 

  CookieJar类有一些子类,分别是FileCookieJar,MozillaCookieJar,LWPCookieJar。

  • CookieJar:管理HTTP cookie值、存储HTTP请求生成的cookie、向传出的HTTP请求添加cookie的对象。整个cookie都存储在内存中,对CookieJar实例进行垃圾回收后cookie也将丢失。
  • FileCookieJar (filename,delayload=None,policy=None):从CookieJar派生而来,用来创建FileCookieJar实例,检索cookie信息并将cookie存储到文件中。filename是存储cookie的文件名。delayload为True时支持延迟访问访问文件,即只有在需要时才读取文件或在文件中存储数据。
  • MozillaCookieJar
  • LWPCookieJar (filename,delayload=None,policy=None):从FileCookieJar派生而来,创建与libwww-perl标准的 Set-Cookie3 文件格式兼容的FileCookieJar实例。

方法二:



1 # 访问的大鹏主页:http://www.renren.com/880151247/profile
 2 # 网站的登入页: http://www.renren.com/PLogin.do
 3 
 4 from urllib import request, parse
 5 from http.cookiejar import CookieJar
 6 
 7 
 8 # 登入
 9 # 1.1 创建一个cookiejar对象
10 cookiejar = CookieJar()
11 # 1.2 使用cookiejar创建一个 HTTPCookieProcess对象
12 handler = request.HTTPCookieProcessor(cookiejar)
13 # 1.3 使用上一步创建的headler创建一个opener
14 opener = request.build_opener(handler)
15 
16 
17 
18 # 1.4 使用opener发送登入请求(用户名和密码)
19 headlers = {
20     'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'
21 }
22 data = {
23     'email': '970138074@qq.com',
24     'password': 'pythonspider'
25 }
26 login_url = 'http://www.renren.com/PLogin.do'
27 req = request.Request(url=login_url, headers=headlers, data=parse.urlencode(data).encode('utf-8'))
28 opener.open(req)
29 
30 
31 
32 # 2.访问个人主页
33 # 需要访问的个人主页
34 zhuye_url = 'http://www.renren.com/880151247/profile'
35 # 获取个人主页的时候不要重新构建opener
36 # 而是应使用之前的 opener,因为之前的opener已经包含需要的cookie信息
37 req = request.Request(url=zhuye_url, headers=headlers)
38 reqs = opener.open(req)
39 with open('zhuye.html', 'w', encoding='utf-8') as fp:
40     fp.write(reqs.read().decode('utf-8'))



整理成函数类型:
# 访问的大鹏主页:http://www.renren.com/880151247/profile
# 网站的登入页: http://www.renren.com/PLogin.do

from urllib import request, parse
from http.cookiejar import CookieJar
# 1.4 使用opener发送登入请求(用户名和密码)
headlers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'
}

# 1.登入
def get_opener():
    '''获取opener'''
    # 1.1 创建一个cookiejar对象
    cookiejar = CookieJar()
    # 1.2 使用cookiejar创建一个 HTTPCookieProcess对象
    handler = request.HTTPCookieProcessor(cookiejar)
    # 1.3 使用上一步创建的headler创建一个opener
    opener = request.build_opener(handler)
    return opener


def login_renren(opener):
    '''登入人人网'''
    data = {
        'email': '970138074@qq.com',
        'password': 'pythonspider'
    }
    login_url = 'http://www.renren.com/PLogin.do'
    req = request.Request(url=login_url, headers=headlers, data=parse.urlencode(data).encode('utf-8'))
    opener.open(req)


# 2.访问个人主页
def fanhui_profile(opener):
    '''返回个人主页'''
    # 需要访问的个人主页
    zhuye_url = 'http://www.renren.com/880151247/profile'
    # 获取个人主页的时候不要重新构建opener
    # 而是应使用之前的 opener,因为之前的opener已经包含需要的cookie信息
    req = request.Request(url=zhuye_url, headers=headlers)
    reqs = opener.open(req)
    with open('zhuye.html', 'w', encoding='utf-8') as fp:
        fp.write(reqs.read().decode('utf-8'))


if __name__ == '__main__':
    opener = get_opener()
    login_renren(opener)
    fanhui_profile(opener)



 保存cookie到本地:

   保存cookie到本地,可以使用cookiejar 的save 方法, 并且需要指定一个文件名:



1 from urllib import request
 2 from http.cookiejar import MozillaCookieJar
 3 
 4 # 1. 创建cookie.txt 文件
 5 cookiejar = MozillaCookieJar('cookie.txt')
 6 # 2. headler 创建headler
 7 cookiejar.load(ignore_discard=True) # 加载cookie 信息
 8 headler = request.HTTPCookieProcessor(cookiejar)
 9 # 3. 创建opener
10 opener = request.build_opener(headler)
11 
12 # 向网页发请求
13 # opener.open('http://httpbin.org/cookies/set?course=abc')
14 opener.open('http://httpbin.org/cookies')
15 for cookie in cookiejar:
16     print(cookie)
17 # cookiejar.save(ignore_discard=True)
18 # ignore_discard=True 时表示保存过期cookie信息
现在执行的是加载cookiejar.load()
注释的是创建cookie文件的