python3cookielib模拟登陆

来源:网络 文章列表 2019-06-06 8
利用cookielib模块的CookieJar类的对象来捕获cookie并在后续连接请求时重新发送,比如可以实现模拟登录功能。

Cookie介绍

Cookie,指某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密)。

比如说有些网站需要登录后才能访问某个页面,在登录之前,你想抓取某个页面内容,登陆前与登陆后是不同的,或者不允许的。

使用Cookie和使用代理IP一样,也需要创建一个自己的opener。在HTTP包中,提供了cookiejar模块,用于提供对Cookie的支持。

我们可以利用cookielib模块的CookieJar类的对象来捕获cookie并在后续连接请求时重新发送,比如可以实现模拟登录功能。

 

正式开始:

在python2.0版本导入cookielib直接import cookielib

python 3.6 改成 http.cookiejar了,所以只要改成from http import cookiejar就自动导入cookiejar了,如果还是不行,就把所有的.pyc删掉试试。

1、首先导入我们需要用到的模块

from urllib import request
from urllib import parse
from http import cookiejar

2、通过cookieJar()类构建一个cookieJar()对象,用来保存cookie的值

cookie = cookiejar.CookieJar()

3、通过HTTPCookieProcessor()处理器类构建一个处理器对象,用来处理cookie,参数就是构建的CookieJar()对象

cookie_handler = urllib.request.HTTPCookieProcessor(cookie)

4、构建一个自定义的opener,实现帐号密码发送

opener = urllib.request.build_opener(cookie_handler)
opener.addheaders = [("User-Agent", "Opera/9.80 (Windows NT 6.1; U; zh-cn) Presto/2.9.168 Version/11.50")]
opener.addheaders = [("User-Agent","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36")]

url = "http://www.renren.com/"

data = {"email": "xxxxx", "password":"xxxx"}

data = parse.urlencode(data).encode('utf-8')

my_request = request.Request(url, data = data)

response = opener.open(my_request)

print(response.read().decode('utf-8'))

完整代码

from urllib import request
from urllib import parse
from http import cookiejar

#通过cookieJar()类构建一个cookieJar()对象,用来保存cookie的值
cookie = cookiejar.CookieJar()

#通过HTTPCookieProcessor()处理器类构建一个处理器对象,用来处理cookie
#参数就是构建的CookieJar()对象
cookie_handler = request.HTTPCookieProcessor(cookie)

#构建一个自定义的opener
opener = request.build_opener(cookie_handler)

#通过自定义opener的addheaders的参数,可以添加HTTP报头参数
opener.addheaders = [("User-Agent","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36")]

#人人网的登陆接口
url = "http://www.renren.com/PLogin.do"

#需要登陆的账户密码
data = {"email": "mr_mao_hacker@163.com", "password":"alarmchime"}

#通过URL encode()编码转换
data = parse.urlencode(data).encode('utf-8')

my_request = request.Request(url, data = data)

response = opener.open(my_request)

#解码
print(response.read().decode('utf-8'))

腾讯云限量秒杀

1核2G 5M 50元/年 2核4G 8M 74元/年 4核8G 5M 818元/年 CDN流量包 100GB 9元

版权声明

本站部分原创文章,部分文章整理自网络。如有转载的文章侵犯了您的版权,请联系站长删除处理。如果您有优质文章,欢迎发稿给我们!联系站长:
愿本站的内容能为您的学习、工作带来绵薄之力。

评论

  • 随机获取
点击刷新
精彩评论

友情链接