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

技术 赵有财 18108℃ 0评论

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

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

formdata

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

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

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

params = {
          "log": user,
          "pwd": password,
          "rememberme": "forever"
}

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

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

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

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

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

import urllib.request
import random
import http.cookiejar
import urllib.parse

url = 'http://www.zhaoyoucai.com/wp-login.php'
user = 'admin'
password = '*******'

params = {
          "log": user,
          "pwd": password,
          "rememberme": "forever"
}

cookie = http.cookiejar.CookieJar()

openner=urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cookie))
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')]

data = urllib.parse.urlencode(params).encode()
r= openner.open(url,data) 
r=openner.open("http://www.zhaoyoucai.com/wp-admin/") 

f = open('alyy.html','w',encoding='utf-8')
f.write( r.read().decode())
f.close()

另外,写了登录豆瓣的,参考如下:
url = 'https://www.douban.com/accounts/login'
email = 'zh***@163.com'
password = '*******'
params = {
          "form_email": email,
          "form_password": password,
          "source": "index_nav",
          "remember": "on"
}

......
r=openner.open("http://www.douban.com/")

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

转载请注明:「知而不乎」 » Python入门学习:使用http.cookiejar生产Cookie模拟用户登陆

喜欢 (46)or分享 (0)
如果你觉得这篇文章还有价值,对你有帮助,请支持我继续更新 !捐赠本站

关注微信公众号

知而不乎微信公众号