求 cf老白解说我的世界闯关探索第三关

爬虫闯关第三关 - 为程序员服务
爬虫闯关第三关
在第二关成功闯关的页面可得到第三关的url(其实通过前两关的url我们已经能发现每一关url命名的简单规律),如下:
点击链接进入页面后需要注册一个账号,凭借账号方可进入下一步操作。其实涉及到账号相关,大家都应该知道肯定和cookies有联系了。手动注册一个账号后,利用账号分析登录流程。这里我仍然使用IE浏览器的F12分析工具。
打开IE,先按F12唤出工具栏,选择“网络”导航,点击开始捕获,接着在地址栏输入第三关url并回车,过程中输入之前注册的账号和密码,然后就到了类似于第二关的界面:
爬虫第三关_1
然后再随意输入昵称和30以内的数字并提交,不出意外会提示密码错误。到此从登陆到输入昵称和密码的过程已被完全录制,点击F12工具栏的“停止捕获”,我们就得到了整个访问的流程概览,如下:
爬虫第三关_2
从图中我们可以看到整个流程分为5步,依次点击5个步骤,分析记录请求标头、请求正文、响应标头、cookies等是否有值,值为多少,值的来源与请求顺序之间的关系。其中值得注意的一点是cookies值会存在两个地方:一个是请求标头,一个是请求正文,两者可能相同可能不同,存在请求正文的是POST请求,因此要在post data中附带上cookie值。经过分析,我们得到了整个访问的详细流程:
为方便阅读,设置两个常量:
URL=’/lesson/crawler_ex02/’
LOGIN_URL=’/accounts/login/?next=/lesson/crawler_ex02/’
浏览器向URL发出GET请求,得到一个302的重定向的响应,响应标头中包含了一个Location字段,告诉浏览器新的访问地址LOGIN_URL。如果之前用同样的浏览器闯过第一关或第二关,此请求的请求标头仍然会带上cookie,但并无实际作用,可忽略。
浏览器从第一步响应结果得到新的地址,并向此地址发出GET请求。响应标头中会set一个cookie,如果之前访问过该网站,那么此cookie会和请求标头的cookie一样。不管怎样,此cookie都将作为以后访问过程中的依据之一。我们将此返回的cookie记录为c1。
浏览器向再向LOGIN_URL发出POST请求,得到一个包含URL的302重定向的响应。除了请求正文中的username和password字段外,请求标头和请求正文中都附带上第二步中的cookie c1,返回的响应标头中附带上了两个新的cookie,其中一个会在下次访问的请求标头中覆盖原来的cookie c1。我们将此返回的cookies记录为c2。
第4步的显示的请求方法为POST,但是点击进去后发现请求标头又有GET和POST两个请求(原因尚未找到,还望大神指出),经过多番验证,有效的是GET请求,此GET请求的地址是URL。请求标头中附带的是第3步中的cookie c2,请求正文中的数据可忽略。此步骤得到的就是需要输入昵称和密码的web页面了。
第5步是浏览器向URL提交POST请求,请求标头附带的是第3步的cookie c2,请求正文是昵称密码和cookie c2的其中一个值。
由于第1步返回结果中除了Location字段没有其他有价值的信息,所以在已知新的地址的情况下可省略第1步,直接从第2步开始。第4步只是返回输入数据的用户界面,在程序角度也可以完全省略,因此只需编码实现2、3、5步就行了。
这关我采用的是requests模块,相比之前的urllib使用起来更方便,功能也更强大。其中第3步值得注意的是requests模块会自动处理302重定向的访问,导致cookie获取失败,因此必须设置 allow_redirects=False 来关闭302重定向自动处理,完全手动处理请求。最后,requests返回的html编码是unicode,只有在编码成utf-8后才能被正则识别。
import requests
login_data={'username':'昵称','password':'密码'}
url='/lesson/crawler_ex02/'
login_url='/accounts/login/?next=/lesson/crawler_ex02/'
r2=requests.get(login_url)
c2=r2.cookies
login_data['csrfmiddlewaretoken']=c2['csrftoken']
r3=requests.post(login_url,data=login_data,allow_redirects=False,cookies=c2)
c3=r3.cookies
pass_data={'username':'tom','csrfmiddlewaretoken':c3['csrftoken']}
for passwd in range(31):
print passwd
pass_data['password']=passwd
r5=requests.post(url,pass_data,cookies=c3)
result=re.findall(r'密码错误',r5.text.encode('utf-8'))
if not result:
print r5.text
在循环若干次后,便可得到成功闯关的页面。
爬虫第三关_3
这关主要考察了登录过程的模拟,涉及到cookie和post数据的处理。登录模拟重点在于过程的分析,post数据中各字段意义的分析。比如百度首页登录,post数据中包含20多个字段,要顺利模拟登录必须知道每个字段的来源、关联、意义,要模拟登录十分困难。
copyright@黑月神话,转载请注明出处:
IT技术交流学习
原文地址:, 感谢原作者分享。
您可能感兴趣的代码精品推荐: |
热门游戏推荐:
当前位置: >>
来源:5068QQ游戏&&&&发表时间:&&&&
  隐藏关卡第三关三星攻略详解.在开心消消乐游戏中只要满足一定的条件就可开启隐藏关卡,最近很多家开启了隐藏关卡,不过隐藏关卡第三关似乎难住了很多玩家。那么开心消消乐隐藏关卡第三关三星怎么打呢?让我们一起来了解一下吧。
  更多开心消消乐游戏攻略尽在5068网!
  开心消消乐隐藏关卡第三关三星攻略
  这一关需要注意的是:这关刚开局 是让你做4连上下特效, 把上面的牢解开一个后 就不会出现没有动物导致失败了 你第一张图的
绿色青蛙就能做出4连上下特效,做出来后附进没有绿色青蛙引爆4连特效,可以动其他的动物,等到没步走的时候从新洗牌,这样绿色青蛙就能引爆了。
  希望可以帮到大家哦!
开心消消乐关卡攻略大全
开始玩  进入
更多玩家推荐
(0位玩家推荐):
(140位玩家推荐):
(68位玩家推荐):
(38位玩家推荐):
(24位玩家推荐):
(56位玩家推荐):
(84位玩家推荐):
(61位玩家推荐):
(210位玩家推荐):
24小时热点
专区点击排行
蝉童网络 All Rights Reserved.

参考资料

 

随机推荐