第三关,先登录,再猜密码,这关难度较第二关大幅增加,要先去注册一个登录账号,然后打开F12,多登录几次,观察headers数据的变化

给出代码,里面注释很详细

import urllib.request as ur
import urllib.parse as up
import http.cookiejar as hc
import re
#网站打开时会先生成一个cookies,里面只有csrfmiddlewaretoken值,需要把这个cookies保存下来,
#在登录的时候需要验证用到,还需要提取csrfmiddlewaretoken的值,在POST提交表单的时候
#需要提交三个数据,用户名、密码和该值,等验证登录通过以后,服务器会更新cookies,里面
#有两个值sessionid和csrfmiddlewaretoken,需要重新提取csrfmiddlewaretoken的值,因为已经
#发生变化了,然后再重新保存cookies到本地,后面的操作会一直用到这两项数据
url='http://www.heibanke.com/accounts/login/?next=/lesson/crawler_ex02/'
cookie=hc.MozillaCookieJar()
handler=ur.HTTPCookieProcessor(cookie)
opener=ur.build_opener(handler)
req=ur.Request(url)
res=opener.open(req)
#保存第一次cookies到本地
cookie.save('cookie.txt',ignore_discard=True, ignore_expires=True)
#提取csrfmiddlewaretoken值
for i in cookie:
token=i.value
value={'csrfmiddlewaretoken':token,'username':'fangjun','password':'19870716'}
data=up.urlencode(value).encode('utf-8')
headers={
"User-Agent":'Mozilla/5.0 (iPhone; CPU iPhone OS 8_0 like Mac OS X) AppleWebKit/600.1.3 (KHTML, like Gecko) Version/8.0 Mobile/12A4345d Safari/600.1.4',
"referer":'http://www.heibanke.com/accounts/login/?next=/lesson/crawler_ex02/'
}
#加载cookies登录网站
cookie.load('cookie.txt',ignore_discard=True,ignore_expires=True)
handler=ur.HTTPCookieProcessor(cookie)
opener=ur.build_opener(handler)
#提交表单数据,这里的headers非必须项,仅作示例
req=ur.Request(url,data,headers)
res=opener.open(req)
#登录成功,重新保存cookies到本地
cookie.save('cookie.txt',ignore_discard=True, ignore_expires=True)
#测试密码开始
url='http://www.heibanke.com/lesson/crawler_ex02/'
#加载cookies
cookie.load('cookie.txt',ignore_discard=True,ignore_expires=True)
cookievalue=[]
for i in cookie:
cookievalue.append(i.value)
#重新提取csrfmiddlewaretoken的值
token=cookievalue[0]
handler=ur.HTTPCookieProcessor(cookie)
opener=ur.build_opener(handler)
pat=re.compile(r'<h3>您输入的密码错误, 请重新输入</h3>')
for i in range(30):
#还是需要提交三个数据
data={'username':'xxx','password':i,'csrfmiddlewaretoken':token}
data=up.urlencode(data).encode('utf-8')
req=ur.Request(url,data)
res=opener.open(req).read().decode('utf-8')
if pat.search(res):
print("it's wrong",i)
else:
print('right,the password is',i)
break

  

python3 黑板客爬虫闯关游戏(三)的更多相关文章

  1. python3 黑板客爬虫闯关游戏(一)

    这是学习python爬虫练习很好的网站,强烈推荐! 地址http://www.heibanke.com/lesson/crawler_ex00/ 第一关猜数字 很简单,直接给出代码 import ur ...

  2. python3 黑板客爬虫闯关游戏(四)

    这关较第三关难度增加许多,主要多了并发编程 密码一共有100位,分布在13页,每页打开的时间在15秒左右,所以理所当然的想到要用并发,但是后来发现同IP访问间隔时间不能小于8秒,不然会返回404,所以 ...

  3. python3 黑板客爬虫闯关游戏(二)

    第二关猜登录密码,需要用到urllib.request和urllib.parse 也很简单,给代码 import urllib.request as ur import urllib.parse as ...

  4. Python:黑板课爬虫闯关第一关

    近日发现了[黑板课爬虫闯关]这个神奇的网页,练手爬虫非常的合适 地址:http://www.heibanke.com/lesson/crawler_ex00/ 第一关非常的简单 get 请求网址,在响 ...

  5. Python:黑板课爬虫闯关第五关

    第五关是最后一关了,至此之后黑板课就没有更新过关卡了. 第五关地址:http://www.heibanke.com/lesson/crawler_ex04/ 可以看到,是在第三关的基础上加了验证码. ...

  6. Python:黑板课爬虫闯关第四关

    第四关地址:http://www.heibanke.com/lesson/crawler_ex03/ 一开始看到的时候有点蒙,不知道啥意思,说密码需要找出来但也没说怎么找啊. 别急,随便输了个昵称和密 ...

  7. Python:黑板课爬虫闯关第三关

    第三关开始才算是进入正题了. 输入网址 http://www.heibanke.com/lesson/crawler_ex02/,直接跳转到了 http://www.heibanke.com/acco ...

  8. Python:黑板课爬虫闯关第二关

    第二关依然是非常的简单 地址:http://www.heibanke.com/lesson/crawler_ex01/ 随便输入昵称呢密码,点击提交,显示如下: 这样看来就很简单了,枚举密码循环 po ...

  9. <爬虫>黑板爬虫闯关02

    import requests from lxml import etree ''' 黑板爬虫闯关02 网址:http://www.heibanke.com/lesson/crawler_ex01/ ...

随机推荐

  1. 用Tensorflow让神经网络自动创造音乐

    #————————————————————————本文禁止转载,禁止用于各类讲座及ppt中,违者必究————————————————————————# 前几天看到一个有意思的分享,大意是讲如何用Ten ...

  2. C#获取CPU占用率、内存占用、磁盘占用、进程信息

    代码: using System; using System.Collections.Generic; using System.Diagnostics; using System.Threading ...

  3. 创建ejs模板的express工程

    npm install -g express npm install -g express-generator express -e projectName cd projectName npm in ...

  4. C语言结构体对齐

    1.结构体变量中的元素如何访问? (1)数组中元素的访问方式:表面上有2种方式(数组下标方式和指针方式):实质上都是指针方式访问.(2)结构体变量中的元素访问方式:只有一种,用.或者->的方式来 ...

  5. redis 命令

    添加数据 p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo } span.s1 { } set key value //添加多条数据 ...

  6. 通俗理解Android事件分发与消费机制

    深入:Android Touch事件传递机制全面解析(从WMS到View树) 通俗理解Android事件分发与消费机制 说起Android滑动冲突,是个很常见的场景,比如SliddingMenu与Li ...

  7. maven

    maven常见问题问答 1.前言 Maven,发音是[`meivin],"专家"的意思.它是一个很好的项目管理工具,很早就进入了我的必备工具行列,但是这次为了把project1项目 ...

  8. 【BZOJ-3270】博物馆 高斯消元 + 概率期望

    3270: 博物馆 Time Limit: 30 Sec  Memory Limit: 128 MBSubmit: 292  Solved: 158[Submit][Status][Discuss] ...

  9. js 正则表达式 ( 1 )

    https://regexper.com/ 量词: ?: 最多一次(0次或者1次) +:至少一次(大于等于1次) *:大于等于0次 {n}:n次 {n,m}:n次到m次之间,包括n,m {n,}:n次 ...

  10. Parallel.Foreach

    随着多核时代的到来,并行开发越来越展示出它的强大威力! 使用并行程序,充分的利用系统资源,提高程序的性能.在.net 4.0中,微软给我们提供了一个新的命名空间:System.Threading.Ta ...