爬虫学习二
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文件的
以上是关于爬虫学习二的主要内容,如果未能解决你的问题,请参考以下文章