Python爬虫-----什么是Cookie

什么是Cookie?(通常是加密的,SSL)

简单来说,访问每一个互联网页面,都是通过HTTP协议进行的,然而HTTP协议是一个无状态协议,所谓的无状态协议即无法维持会话之间的状态。比如,在仅适用HTTP协议的话,登录一个网站的时候,假如登录成功了,但是当访问该网站的其他页面时,该登录状态则会消失,此时还需要再次登录,这使得在访问网页的时候非常不方便。因此,需要一种办法将登录信息进行保存,避免每次都需要登录的繁琐操作。

实现以上操作的常见方法有两种:通过Cookie保存会话信息或通过Session保存会话信息。

通过Cookie方式:如果采用该方式保存会话信息,此时会将所有的会话信息保存在客户端,当我们访问同一个网站的其他页面时,会从Cookie中读取对应的会话信息,从而判断目前的会话状态,比如判断是否已经登录。

通过Seesion方式:如果采用该方式保存会话信息,此时会将对应的会话信息保存在服务器端,但是服务器端给客户端发SessionID等信息,这些信息一般保存在客户端的Cookie中,当然,如果客户端禁用Cookie,也会通过其他方式存储。但是,就目前而言,大部分情况还是会将这一部分的信息存到Cookie中。然后用户在访问该网页其他网页时候,会从Cookie中读取到这一部分信息,然后从服务器中的Session中根据这部分Cookie信息检索出该客户端的所有会话信息,然后进行会话控制。显然,在使用Session方式时,也会用到Cookie。

因此,不管使用哪种方式,在大部分情况下,均使用Cookie方式进行会话信息的保存。比如在爬虫的登录中,如果没有Cookie,登录成功一个网站,但如果需要访问该网站的其它页面时,仍然会是未登录状态。如果有了Cookie,当登录成功后,爬取该网站的其他网页时,则仍然会保存登录状态对其内容进行爬取。

Python3.x中Cookie实战

在Python3.x中可以使用Cookiejar库进行处理,Python2中使用Cookielib库进行处理

第一步:先打开博客园首页,点击登录,并且输入进去一个错误的用户名和密码

第二步:在浏览中按住F12,并且点击NetWork

第三步:点击登录

可以看到,在调试界面中出现很多网址,这些网址大多数使用的是GET方法,只有一个使用了POST方法,这个使用POST方法的网址,在里面可以分析出处理POST表单的真实页面,即Request URL字段的属性值,即为POST表单的真实页面:

https://passport.cnblogs.com/user/signin

第四步:接下来我们要构建需要传递的信息,查看登陆页面的源代码,并且找到登陆框对对应的HTTP源代码。

可以看到,登录框中用户名对应的表单name为:username,密码对应的表单name为:password。

所以此时,需要构建数据中需要包含的这两项,该数据可以构建为:

Login_data={

"username":"你自己的博客园用户名",

"password":“你自己的博客园密码”

}

第五步:有了这些信息之后,便可以登录了,但是为了作者为了更好的学习,先使用无Cookie登录方式进行。

#导入库
import urllib.request
import urllib.parse

#真实的网页URL
url="https://passport.cnblogs.com/user/signin"
#将表单数据进行urllib.parse.urlencode编码处理后,在设置为utf-8格式
postdata=urllib.parse.urlencode(
    {
        "username":"你自己的用户名",
        "password":"你自己的密码"
    }
).encode('utf-8')
#创建Request对象
req=urllib.request.Request(url,postdata)
#对Request对象添加header中用户代理字段
req.add_header('User-Agent',"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36")
#登录并爬取对应网站
data=urllib.request.urlopen(req).read()
#对爬取到的网页HTML进行处理
f=open("test.html","wb")#打开当前路径下文件test.txt
f.write(data)#写入文件
f.close()#关闭文件
url2="https://www.cnblogs.com"
#创建Request对象
req2=urllib.request.Request(url2)
#对Request对象添加header中用户代理字段
req2.add_header('User-Agent',"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36")
#登录并爬取对应网站
data2=urllib.request.urlopen(req2).read()
#对爬取到的网页HTML进行处理
f2=open("test1.html","wb")#打开当前路径下文件test.txt
f2.write(data2)#写入文件
f2.close()#关闭文件
print("OK")

第六步:使用Cookie登录

进行Cookie登录常用的思路:

1:导入Cookie处理模块Cookiejar

2:使用http.cookiejar.CookieJar()创建CookieJar对象

3:使用HTTPCookieProcessor创建Cookie处理器,并以其为参数创建opener对象

4:创建全局默认的opener对象

#导入库
import urllib.request
import urllib.parse
import http.cookiejar

#真实的网页URL
url="https://passport.cnblogs.com/user/signin"
#将表单数据进行urllib.parse.urlencode编码处理后,在设置为utf-8格式
postdata=urllib.parse.urlencode(
    {
        "text":"用户名",
        "password":"密码"
    }
).encode('utf-8')
#创建Request对象
req=urllib.request.Request(url,postdata)
#对Request对象添加header中用户代理字段
req.add_header('User-Agent',"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36")
#使用http.cookiejar.CookieJar()创建CookieJar对象
cjar=http.cookiejar.CookieJar()
#使用HTTPCookieProcessor创建cookie处理器,并以其为参数构建opener对象
opener=urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cjar))
#将opener设置为全局
urllib.request.install_opener(opener)
#登录并爬取对应网站
data=opener.open(req).read()
#对爬取到的网页HTML进行处理
f=open("test.html","wb")#打开当前路径下文件test.txt
f.write(data)#写入文件
f.close()#关闭文件
url2="https://www.cnblogs.com"
#创建Request对象
req2=urllib.request.Request(url2)
#对Request对象添加header中用户代理字段
req2.add_header('User-Agent',"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36")
#登录并爬取对应网站
data2=urllib.request.urlopen(req2).read()
#对爬取到的网页HTML进行处理
f2=open("test1.html","wb")#打开当前路径下文件test.txt
f2.write(data2)#写入文件
f2.close()#关闭文件
print("OK")

以上步骤即可完成Cookie实战。

但是,有很多网站现在都需要进行验证才能登录,怎样跳过这个验证过程直接使用Cookie进行登录呢?

猜你喜欢

转载自blog.csdn.net/bao_120973681/article/details/84197052