python3cookielib模拟登陆
利用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'))
版权声明
本站部分原创文章,部分文章整理自网络。如有转载的文章侵犯了您的版权,请联系站长删除处理。如果您有优质文章,欢迎发稿给我们!联系站长:
愿本站的内容能为您的学习、工作带来绵薄之力。
评论