Python:黑板课爬虫闯关第三关
第三关开始才算是进入正题了。
输入网址 http://www.heibanke.com/lesson/crawler_ex02/,直接跳转到了 http://www.heibanke.com/accounts/login/?next=/lesson/crawler_ex02/,显示如下
仔细看一下这个网址,显然,这是一个登陆网址,next参数应该是登录成功后跳转网页的地址。注册登录后,显示第三关:
首先可以肯定的是,必须要先登录,并保持登录状态,否则是爬不过关的。界面提示有两层保护,这应该就是第一层。
先注册了一个账号,然后用代码尝试登录,post 用户名密码之后,print 一下响应的 html,发现并不是我看到的第三关的内容,说明登录没有成功。看一下里面有一句话:You are seeing this message because this site requires a CSRF cookie when submitting forms. This cookie is required for security reasons, to ensure that your browser is not being hijacked by third parties.
简单的说,就是为了防止CSRF攻击(其实就是黑板课设的障碍),需要一个cookie。
退出登录,回到登录界面,打开开发者工具(我用的是谷歌浏览器),追踪一下网络请求,发现登录的时候,除了用户名密码,还有一个 csrfmiddlewaretoken 参数,而 csrfmiddlewaretoken 参数来自于 cookie 中的 csrftoken。
先 get 一下登录页面,从返回的 session 中获取 cookie 值中获取 csrftoken 值,连同用户名密码一起 post,print 响应的 html,结果正确。
然后就是跟第二关一样,暴力破解密码了。保险起见,也追踪了下请求,发现机制跟登录是一样的,也需要csrfmiddlewaretoken 参数,一样处理就好了。
这样思路就理清了,每次 post 用户名密码之前,先 get 请求一下,从服务器发给你的 cookie 中获取 csrftoken 的值作为 post 时的 csrfmiddlewaretoken 参数即可。
代码如下:
import re
import requests
import time def main():
url_login = 'http://www.heibanke.com/accounts/login/?next=/lesson/crawler_ex02/'
url = 'http://www.heibanke.com/lesson/crawler_ex02/'
session = requests.Session()
# 获取cookie
session.get(url_login)
token = session.cookies['csrftoken']
# 登录
session.post(url_login, data={'csrfmiddlewaretoken': token, 'username': '', 'password': ''})
for psd in range(30):
print(f'test password {psd}')
session.get(url)
token = session.cookies['csrftoken']
r = session.post(url, data={'csrfmiddlewaretoken': token, 'username': 'aa', 'password': psd})
html = r.text
if '密码错误' not in html:
m = re.search('(?<=\<h3\>).*?(?=\</h3\>)', html)
print(m.group())
m = re.search('(\<).*?href="([^"]*?)".*?(\>下一关\</a\>)', html)
print(f'下一关 http://www.heibanke.com{m.group(2)}')
return
else:
time.sleep(1) if __name__ == '__main__':
main()
Python:黑板课爬虫闯关第三关的更多相关文章
- Python:黑板课爬虫闯关第一关
近日发现了[黑板课爬虫闯关]这个神奇的网页,练手爬虫非常的合适 地址:http://www.heibanke.com/lesson/crawler_ex00/ 第一关非常的简单 get 请求网址,在响 ...
- Python:黑板课爬虫闯关第五关
第五关是最后一关了,至此之后黑板课就没有更新过关卡了. 第五关地址:http://www.heibanke.com/lesson/crawler_ex04/ 可以看到,是在第三关的基础上加了验证码. ...
- Python:黑板课爬虫闯关第四关
第四关地址:http://www.heibanke.com/lesson/crawler_ex03/ 一开始看到的时候有点蒙,不知道啥意思,说密码需要找出来但也没说怎么找啊. 别急,随便输了个昵称和密 ...
- Python:黑板课爬虫闯关第二关
第二关依然是非常的简单 地址:http://www.heibanke.com/lesson/crawler_ex01/ 随便输入昵称呢密码,点击提交,显示如下: 这样看来就很简单了,枚举密码循环 po ...
- python3 黑板客爬虫闯关游戏(一)
这是学习python爬虫练习很好的网站,强烈推荐! 地址http://www.heibanke.com/lesson/crawler_ex00/ 第一关猜数字 很简单,直接给出代码 import ur ...
- python3 黑板客爬虫闯关游戏(四)
这关较第三关难度增加许多,主要多了并发编程 密码一共有100位,分布在13页,每页打开的时间在15秒左右,所以理所当然的想到要用并发,但是后来发现同IP访问间隔时间不能小于8秒,不然会返回404,所以 ...
- python3 黑板客爬虫闯关游戏(三)
第三关,先登录,再猜密码,这关难度较第二关大幅增加,要先去注册一个登录账号,然后打开F12,多登录几次,观察headers数据的变化 给出代码,里面注释很详细 import urllib.reques ...
- python3 黑板客爬虫闯关游戏(二)
第二关猜登录密码,需要用到urllib.request和urllib.parse 也很简单,给代码 import urllib.request as ur import urllib.parse as ...
- <爬虫>黑板爬虫闯关02
import requests from lxml import etree ''' 黑板爬虫闯关02 网址:http://www.heibanke.com/lesson/crawler_ex01/ ...
随机推荐
- BZOJ_1180_[CROATIAN2009]OTOCI_LCT
BZOJ_1180_[CROATIAN2009]OTOCI_LCT Description 给出n个结点以及每个点初始时对应的权值wi.起始时点与点之间没有连边.有3类操作: 1.bridge A ...
- BZOJ_1697_[Usaco2007 Feb]Cow Sorting牛排序_贪心
BZOJ_1697_[Usaco2007 Feb]Cow Sorting牛排序_贪心 Description 农夫JOHN准备把他的 N(1 <= N <= 10,000)头牛排队以便于行 ...
- 【游戏开发】小白学Lua——从Lua查找表元素的过程看元表、元方法
引言 在上篇博客中,我们简单地学习了一下Lua的基本语法.其实在Lua中有一个还有一个叫元表的概念,不得不着重地探讨一下.元表在实际地开发中,也是会被极大程度地所使用到.本篇博客,就让我们从Lua查找 ...
- ionic3 懒加载在微信上缓存的问题
1.懒加载是什么? 在ionic2中所有的组件.模块.服务.管道等都堆积在app.module.ts模块中,在页面初始化的时候会一次性加载所有的资源,导致资源过大,页面渲染缓慢,也导致app.modu ...
- Java基础-单列设计模式
概念: Java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主要介绍三种:懒汉式单例.饿汉式单例.登记式单例. 单例模式有以下特点: 1.单例类只能有一个实例. 2.单例类必须自己创建 ...
- java可用与串口通信的一些库
java原生对串口的支持只有javax.comm,javax.comm比较老了,而且不支持64位系统,我在看jlibmodbus(一个java实现的modbus协议栈)的时候发现了几个可供使用的jav ...
- 为啥程序会有bug?
如果这是第二次看到我的文章,欢迎右侧扫码订阅我哟~
- 记录Ocelot + SignalR 多服务端测试
前言 分两个项目,一个Gatway,一个SignalR 贴代码 1.Gatway 1.引用Ocelot 2.添加一点点代码 Startup.cs 3.简单配置ocelot ocelot.json { ...
- 深入理解Linux内核 学习笔记(5)
第五章 定时测量 内核必须显式地与三种时钟打交道:实时时钟(Real Time Clock, RTC).时间标记计数器(Time Stamp Counter, TSC)及可编程间隔定时器( Prog ...
- kubernetes实践之一:kubernetes二进制包安装
kubernetes二进制部署 1.环境规划 软件 版本 Linux操作系统 CentOS Linux release 7.6.1810 (Core) Kubernetes 1.9 Docker 18 ...