python3cookielib模拟登陆

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、首先导入我们需要用到的模块

  1. from urllib import request
  2. from urllib import parse
  3. from http import cookiejar

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

  1. cookie = cookiejar.CookieJar()

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

  1. cookie_handler = urllib.request.HTTPCookieProcessor(cookie)

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

  1. opener = urllib.request.build_opener(cookie_handler)
  2. opener.addheaders = [("User-Agent", "Opera/9.80 (Windows NT 6.1; U; zh-cn) Presto/2.9.168 Version/11.50")]
  3. 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")]
  4. url = "http://www.renren.com/"
  5. data = {"email": "xxxxx", "password":"xxxx"}
  6. data = parse.urlencode(data).encode('utf-8')
  7. my_request = request.Request(url, data = data)
  8. response = opener.open(my_request)
  9. print(response.read().decode('utf-8'))

完整代码

  1. from urllib import request
  2. from urllib import parse
  3. from http import cookiejar
  4. #通过cookieJar()类构建一个cookieJar()对象,用来保存cookie的值
  5. cookie = cookiejar.CookieJar()
  6. #通过HTTPCookieProcessor()处理器类构建一个处理器对象,用来处理cookie
  7. #参数就是构建的CookieJar()对象
  8. cookie_handler = request.HTTPCookieProcessor(cookie)
  9. #构建一个自定义的opener
  10. opener = request.build_opener(cookie_handler)
  11. #通过自定义opener的addheaders的参数,可以添加HTTP报头参数
  12. 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")]
  13. #人人网的登陆接口
  14. url = "http://www.renren.com/PLogin.do"
  15. #需要登陆的账户密码
  16. data = {"email": "mr_mao_hacker@163.com", "password":"alarmchime"}
  17. #通过URL encode()编码转换
  18. data = parse.urlencode(data).encode('utf-8')
  19. my_request = request.Request(url, data = data)
  20. response = opener.open(my_request)
  21. #解码
  22. print(response.read().decode('utf-8'))
posted @   kliziM  阅读(114)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· .NET Core 中如何实现缓存的预热?
· 三行代码完成国际化适配,妙~啊~
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
点击右上角即可分享
微信分享提示