Python入门学习:使用http.cookiejar生产Cookie模拟用户登陆

  • 时间:
  • 浏览:0
  • 来源:知而不乎

有的网站,特别像社交网站,需要登陆才能抓取到网站的数据,那么光模拟浏览器请求网站内容是还不够了,还需要能够模拟用户登陆网站,然后保留登陆状态,获取网站相关的内容。
想要成功模拟真实用户登陆,重点要找到登录时候提交表单都包含了哪些真实的数据。然后使用Python生成这些数据,携带在请求头信息当中,这样服务器就能当做正常的访客,返回正确的信息。一般需要携带cookie,post表单数据即可,成功通过验证后,可以访问其他需要登录才可以获取的内容。

要获取这些数据使用Chrome浏览器的“开发者工具”就好了,使用快捷键“Ctrl+Shift+I”可以调出工具界面,然后切换到“Network”,当我们提交的时候就可以看到了,例如使用wordpress的演示一下:

WordPress的登录后台地址大家都知道了,是博客地址加上’/wp-login.php’,先来定义登录地址:

  1. url = 'http://www.zhaoyoucai.com/wp-login.php'

然后就是构造信息字典了,需要提交的信息主要有:用户名(log)、密码(pwd)、记住密码(rememberme),将这些信息写在一个字典变量中:

  1. params = {
  2. "log": user,
  3. "pwd": password,
  4. "rememberme": "forever"
  5. }

登录后我们可以获取后台首页的代码试试看,保存起来看对不对。

另外需要用到处理cookie的模块http.cookiejar,先创建一个CookieJar类,然后在请求的时候传递,看看官方的例子:

  1. cj = http.cookiejar.CookieJar()
  2. opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cj))
  3. r = opener.open("http://www.zhaoyoucai.com/")

使用起来非常简单,基本直接可以用了。

下面来看看完整的代码吧:

  1. import urllib.request
  2. import random
  3. import http.cookiejar
  4. import urllib.parse
  5.  
  6. url = 'http://www.zhaoyoucai.com/wp-login.php'
  7. user = 'admin'
  8. password = '*******'
  9.  
  10. params = {
  11. "log": user,
  12. "pwd": password,
  13. "rememberme": "forever"
  14. }
  15.  
  16. cookie = http.cookiejar.CookieJar()
  17.  
  18. openner=urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cookie))
  19. openner.addheaders = [('User-agent', 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36')]
  20.  
  21. data = urllib.parse.urlencode(params).encode()
  22. r= openner.open(url,data)
  23. r=openner.open("http://www.zhaoyoucai.com/wp-admin/")
  24.  
  25. f = open('alyy.html','w',encoding='utf-8')
  26. f.write( r.read().decode())
  27. f.close()
  28.  
  29. 另外,写了登录豆瓣的,参考如下:
  1. url = 'https://www.douban.com/accounts/login'
  2. email = 'zh***@163.com'
  3. password = '*******'
  4. params = {
  5. "form_email": email,
  6. "form_password": password,
  7. "source": "index_nav",
  8. "remember": "on"
  9. }
  10.  
  11. ......
  12. r=openner.open("http://www.douban.com/")

第一次登录OK,但是后面我要测试,就反复登录,后面要输验证码了,参考了网上的,可以有两个解决办法,1是程序暂停接受输入验证码,把验证图片下载下来,然后输入进去。2是使用保存的有效cookie进行登录。我觉得第二种靠谱一些,下次有时间试试。希望能写一个抢沙发的机器人来。

猜你喜欢

Python入门学习:应用random函数随机生成HTTP请求headers信息

为什么抓取会收到限制要采集百度数据,查询关键词排名等,因为短时间内发出太多的请求,会受到百度局域网异常访问屏蔽策略的限制。出现以下错误信息:要突破这样的限制,必须伪装成为真正的

2018-05-17

Python入门学习:模拟浏览器查询百度获取结果

本来学习Python就是想和SEO相关的,所以就在学习的时候把一下常见的需求引进来,这样动力大,学起来就快一些,深刻一些了。SEO最常用的的恐怕就是查询关键词的排名了,手动查询

2018-05-17

Python入门学习:Beautiful Soup 4检查页面TDKH标签

环境:Python3.3.5beautifulsoup4-4.3.2Eclipse+PyDev利用BeautifulSoup4能够很方便的提取页面的标签,那我就来写一个检查页面

2018-05-17

python入门学习:采集搜狗下拉框联想词

最近在拿Python练手,单纯的学习又太枯燥,直接用来实现一些简单功能这样积极性高,效果会好点。环境:Python3.3.5+eclipse+pydev先上代码:#encodi

2018-05-17