爬虫学习二

Posted 奔跑的小乌龟

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了爬虫学习二相关的知识,希望对你有一定的参考价值。

什么是cooker

  

      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 = \'https://www.cnblogs.com/QQmini/\'
 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 (filename,delayload=None,policy=None):从FileCookieJar派生而来,创建与Mozilla浏览器 cookies.txt兼容的FileCookieJar实例。

  • 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文件的

 

以上是关于爬虫学习二的主要内容,如果未能解决你的问题,请参考以下文章

爬虫遇到头疼的验证码?Python实战讲解弹窗处理和验证码识别

爬虫学习 07.验证码处理

了解HTTP状态码-Java网络爬虫系统性学习与实战系列

了解HTTP状态码-Java网络爬虫系统性学习与实战系列

零基础深度学习爬虫验证码识别

爬虫学习笔记(十九)—— 滑动验证码