快使用Ctrl+D收藏本站!本站早已不再维护,择期将关闭本站!!本站资源已全部失效,请勿打赏!!PLC培训创业官网 苏州实操派科技-点击访问-

Python3.6爬虫入门自学教程之七:cookies的使用及基本说明

Python爬虫 π³朱子文 3755℃ 0评论

1.Cookie简介

基于 Internet的各种服务系统应运而生,建立商业站点或者功能比较完善的个人站点,常常需要记录访问者的一些信息;论坛作为 Internet发展的产物之一,在 Internet 中发挥着越来越重要的作用,是用户获取、交流、传递信息的主要场所之一,论坛常常也需要记录访问者的一些基本信息(如身份识别号码、密码、用户在 Web 站点购物的方式或用户访问该站点的次数)。目前公认的是,通过 Cookie 和 Session 技术来实现记录访问者的一些基本信息——百度百科

cookies简单来说就是服务器端网站,是为了提高网站安全性而做的一种方案。一般来说,登陆到网站都需要进行cookie验证,而有的网站上的内容需要我们登陆后才能抓取查看。所以我们在使用python编写爬虫的时候,在登陆的时候就需要记录下cookie信息。然后再进行登陆,就可以了。

2.python3.6中的opener

The OpenerDirector class opens URLs via BaseHandlers chained together. It manages the chaining of handlers, and recovery from errors.

这个类是用来打开URL链接的,我们前面用到的urlopen这个方法,实际上可以理解成opener的特殊实例对象。传入的参数仅仅是url,data,timeout。而我们要使用cookie的话,这个方法就没有这个功能了,必须使用opener对象,来打开url。下面这行代码是用来build构建一个opener对象的,传入的proHandler参数,具体类型可以在下面这个链接里查看:https://docs.python.org/3.6/library/urllib.request.html

urllib.request.build_opener([handler, ])

Return an OpenerDirector instance, which chains the handlers in the order given. handlers can be either instances of BaseHandler, or subclasses of BaseHandler (in which case it must be possible to call the constructor without any parameters).

返回一个OpenerDirector实例,它按照给定的顺序链接处理程序。处理程序可以是基类处理程序的实例,也可以是基类处理程序的子类(在这种情况下,必须调用构造函数而不需要任何参数)。

这3行代码,上面两行是获取cookie实例的,我们在下面第3部分进行讲解。第三行是构建opener实例对象。构建完对象,我们就可以使用这个对象的方法了。咱们还打开这个链接:https://docs.python.org/3.6/library/urllib.request.html。然后下拉找到:21.6.2. OpenerDirector Objects。这里有这个对象的方法:

OpenerDirector.open(url, data=None[, timeout])

Open the given url (which can be a request object or a string), optionally passing the given data. Arguments, return values and exceptions raised are the same as those of urlopen() (which simply calls the open() method on the currently installed global OpenerDirector). The optional timeout parameter specifies a timeout in seconds for blocking operations like the connection attempt (if not specified, the global default timeout setting will be used). The timeout feature actually works only for HTTP, HTTPS and FTP connections).

这里就能看到,urlopen()这个方法是opener实例.open()方法简化版。这些资料在上面的链接中都能查到,很方便。关于这个opener的实例方法还有另外两个OpenerDirector.add_handler(handler)和OpenerDirector.error(proto, *args)具体信息大家自己去看吧。

 

3.python3.6中Cookie应用

在python3.6中,cookie的存储是由import http.cookiejar这个模块库里的方法实现的。大家打开上面带大家看的网页,然后找到21.24. http.cookiejar — Cookie handling for HTTP clients,这个模块专门负责cookie相关内容的。https://docs.python.org/3.6/library/http.cookiejar.html

The http.cookiejar module defines classes for automatic handling of HTTP cookies. It is useful for accessing web sites that require small pieces of data – cookies – to be set on the client machine by an HTTP response from a web server, and then returned to the server in later HTTP requests.

这个模块定义了自动处理HTTP cookies的类。通过访问Web服务器上的HTTP响应,这对于很多网站来说非常有用。网站服务器可以将需要的cookies数据,通过HTTP响应的方式设置到客户端设备上,这样在后期的http请求服务中,就可以使用这个cookies信息进行身份认证。

大家打开的这网页,还有其他的关于cookies的类,比如http.cookiejar.FileCookieJar(filename, delayload=None, policy=None),然后是FileCookieJar的子类: http.cookiejar.MozillaCookieJar(filename, delayload=None, policy=None)和class http.cookiejar.LWPCookieJar(filename, delayload=None, policy=None)。这部分内容在这里:https://docs.python.org/3.6/library/http.cookiejar.html#file-cookie-jar-classes

CookieJar —-派生—->FileCookieJar  —-派生—–>MozillaCookieJar(保存文件格式为txt)和LWPCookieJar(这个类是兼容libwww-perl系统库的格式的,在上面的链接中也有说明)

1.获取Cookie保存到变量

python3.6将python2.7内的urllib2库合并到了urllib库下,所以这部分写法和python2.7的写法略有不同。

下面是打印出来的cookies信息:

打开python标准库文件链接,然后查看http.cookiejar.CookieJar类的相关说明如下

class http.cookiejar.CookieJar(policy=None)

policy is an object implementing the CookiePolicy interface.

The CookieJar class stores HTTP cookies. It extracts cookies from HTTP requests, and returns them in HTTP responses. CookieJar instances automatically expire contained cookies when necessary. Subclasses are also responsible for storing and retrieving cookies from a file or database.

从官方的标准库说明中,我们可以看到http.cookiejar.CookieJar,是专门用来保存http cookies的。客户端通过HTTP request请求来表明自己需要获取cookies信息,然后服务器端根据请求响应在HTTP的 response响应头中返回需要的cookies信息。调用这个类的方法,我们就能获得cookie信息。获取到cookie信息后,需要使用HTTPCookieProcessor进行处理。处理完成即可使用opener进行访问

class urllib.request.HTTPCookieProcessor(cookiejar=None)

A class to handle HTTP Cookies.

 

这个英文引用也是官方原文的,在上文中提到的链接中,查找这个类。

这里补充一下https的小知识,具体内容大家自己百度查看别的博客吧

HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。 它是一个URI scheme(抽象标识符体系),句法类同http:体系。用于安全的HTTP数据传输。https:URL表明它使用了HTTP,但HTTPS存在不同于HTTP的默认端口及一个加密/身份验证层(在HTTP与TCP之间)。这个系统的最初研发由网景公司(Netscape)进行,并内置于其浏览器Netscape Navigator中,提供了身份验证与加密通讯方法。现在它被广泛用于万维网上安全敏感的通讯,例如交易支付方面。

2.获取Cookie保存到文件

ignore_discard的意思是即使cookies将被丢弃也将它保存下来,ignore_expires的意思是如果在该文件中cookies已经存在,则覆盖原文件写入,在这里,我们将这两个全部设置为True。运行之后,cookies将被保存到cookie.txt文件中。运行成功之后,然后打开本工程所在目录,就能找到生成的cookie.txt文件。我们打开cookie.txt文件,其内容如下:

这样我们就保存成功了cookie文件。下面我们将分析一下MozillaCookieJar,打开链接:https://docs.python.org/3.6/library/http.cookiejar.html#file-cookie-jar-classes

class http.cookiejar.MozillaCookieJar(filename, delayload=None, policy=None)

A FileCookieJar that can load from and save cookies to disk in the Mozilla cookies.txt file format (which is also used by the Lynx and Netscape browsers).

 

这个类是FileCookieJar的子类,通过这个类的方法,可以实现cookie的保存。cookie文件格式为txt。这个类可以使用save方法保存cookie到文件,也可以使用load方法,将cookie载出使用。

FileCookieJar.save(filename=None, ignore_discard=False, ignore_expires=False)

Save cookies to a file.

  FileCookieJar.load(filename=None, ignore_discard=False, ignore_expires=False)Load cookies from a file.

3.从文件访问cookie并访问

这里我新建了一个文件夹,然后将上面获得的cookie.txt文件拷到了当前工程下,如果没有拷贝会报如下错误:

拷贝成功后,编写如下代码:

运行结果如下:代表我们成功载入cookie并成功连接网站:

4.升级登陆CSDN的代码

运行结果如下:

4.本篇小结

本篇博文,总结了cookie的基本用法,同时介绍了opener类。下一篇博文将为大家介绍http响应码的错误类型。为大家介绍HTTPError这个类,同时和大家一起学习如何处理这类错误。

 

 

转载请注明:燕骏博客 » Python3.6爬虫入门自学教程之七:cookies的使用及基本说明

赞赏作者

微信赞赏支付宝赞赏

喜欢 (1)or分享 (0)

如果您喜欢本站文章,感觉本站的资源对您有帮助,请狠狠点击下面

每累计赞助40元,即可让本站按最低配置运行一个月,感谢您的支持!

发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址