Python:黑板课爬虫闯关第四关
第四关地址:http://www.heibanke.com/lesson/crawler_ex03/

一开始看到的时候有点蒙,不知道啥意思,说密码需要找出来但也没说怎么找啊。
别急,随便输了个昵称和密码,提交一下,就能看到密码提示了。
进入到找密码的链接,显示如下:

注意那一行大字,提示网页加载速度很慢,这一关的意图很明显了,就是:多线程。
密码一共100位,这里虽然显示了翻页,但其实每一页显示的位置是随机的,可能会重复,所以并不是一页页翻到最后一页就可以获取到完整的密码了。
所以我们只要开个多线程,不停的刷第一页就可以了,直到100位全部获取到。
登录部分和第三关是一样的,链接:https://www.cnblogs.com/gl1573/p/9651027.html
代码如下:
import re
import threading
import time
import requests
from bs4 import BeautifulSoup pwlist = [-1 for i in range(100)]
count = 0
lock = threading.Lock() def main():
url_login = 'http://www.heibanke.com/accounts/login/?next=/lesson/crawler_ex03/'
url = 'http://www.heibanke.com/lesson/crawler_ex03/'
session = requests.Session()
session.get(url_login)
token = session.cookies['csrftoken']
# 登录
session.post(url_login, data={'csrfmiddlewaretoken': token, 'username': 'xx', 'password': 'xx'})
threadlist = [threading.Thread(target=getpw, args=(session,)) for i in range(2)]
for thread in threadlist:
thread.setDaemon(True)
thread.start()
for thread in threadlist:
thread.join()
psd = ''.join(pwlist)
print(f'密码:{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()) def getpw(session):
pw_url = 'http://www.heibanke.com/lesson/crawler_ex03/pw_list/'
global count, pwlist
while count < 100:
try:
html = session.get(pw_url).text
except:
time.sleep(1)
continue
if '404 Not Found' in html:
continue
soup = BeautifulSoup(html, 'lxml')
pos = soup.find_all('td', {'title': 'password_pos'})
val = soup.find_all('td', {'title': 'password_val'})
for i in range(len(pos)):
p = int(pos[i].string)
v = val[i].string
lock.acquire()
if pwlist[p - 1] == -1:
pwlist[p - 1] = v
count += 1
lock.release() if __name__ == '__main__':
main()
这里有一点需要注意,开了很多个线程以后,会发现返回一堆的404,这是黑板课做的一个限制,服务器15秒内最多返回两个请求,否则返回404,所以,开20个线程和开2个线程是一样的。
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_ex02/,直接跳转到了 http://www.heibanke.com/acco ...
- Python:黑板课爬虫闯关第二关
第二关依然是非常的简单 地址:http://www.heibanke.com/lesson/crawler_ex01/ 随便输入昵称呢密码,点击提交,显示如下: 这样看来就很简单了,枚举密码循环 po ...
- python3 黑板客爬虫闯关游戏(四)
这关较第三关难度增加许多,主要多了并发编程 密码一共有100位,分布在13页,每页打开的时间在15秒左右,所以理所当然的想到要用并发,但是后来发现同IP访问间隔时间不能小于8秒,不然会返回404,所以 ...
- python3 黑板客爬虫闯关游戏(一)
这是学习python爬虫练习很好的网站,强烈推荐! 地址http://www.heibanke.com/lesson/crawler_ex00/ 第一关猜数字 很简单,直接给出代码 import ur ...
- python3 黑板客爬虫闯关游戏(三)
第三关,先登录,再猜密码,这关难度较第二关大幅增加,要先去注册一个登录账号,然后打开F12,多登录几次,观察headers数据的变化 给出代码,里面注释很详细 import urllib.reques ...
- python3 黑板客爬虫闯关游戏(二)
第二关猜登录密码,需要用到urllib.request和urllib.parse 也很简单,给代码 import urllib.request as ur import urllib.parse as ...
- 嵩天老师python网课爬虫实例1的问题和解决方法
一,AttributeError: 'NoneType' object has no attribute 'children', 网页'tbody'没有子类 很明显,报错的意思是说tbody下面没有c ...
随机推荐
- log.go 源码阅读
) //打开文件 权限:文件追加 文件创建 文件读写 if err != nil { return err } level, err := logrus.Par ...
- BZOJ_3555_[Ctsc2014]企鹅QQ_哈希
BZOJ_3555_[Ctsc2014]企鹅QQ_哈希 Description PenguinQQ是中国最大.最具影响力的SNS(Social Networking Services)网站,以实名制为 ...
- BZOJ_1014_[JSOI2008]火星人prefix_splay+hash
BZOJ_1014_[JSOI2008]火星人prefix_splay+hash 题意:火星人最近研究了一种操作:求一个字串两个后缀的公共前缀.比方说,有这样一个字符串:madamimadam, 我们 ...
- 如何改变XCode的默认设置
改变bundle ID 进入 /Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Project Templates/Appl ...
- Ubuntu16.04 下搭建git服务器及gitweb+nginx配置
本文转自:http://blog.csdn.net/water_horse/article/details/68958140 1.安装所需软件 fengjk@water:~$ sudo apt-get ...
- 映射内网ftp服务器到公网后内网访问出错问题
上文说道映射后外网无法访问解决:https://www.cnblogs.com/Dev0ps/p/9073048.html 添加了ftp的pasv_address的地址 ,内网客户端要设置主动模式(a ...
- Android代码混淆的问题解决(java.io.FileNotFoundException)
Android Studio(2.3.3) 在给代码混淆时,提示: Warning:Exception while processing task java.io.FileNotFoundExcept ...
- 『简单积性函数和dirichlet卷积』
简单积性函数 在学习欧拉函数的时候,相信读者对积性函数的概念已经有了一定的了解.接下来,我们将相信介绍几种简单的积性函数,以备\(dirichlet\)卷积的运用. 定义 数论函数:在数论上,对于定义 ...
- 为什么设置overflow为hidden可以清除浮动带来的影响
1.问题起源 在平时的业务开发写CSS中,为了满足页面布局,元素的浮动特性我们用的不能再多了.使用浮动的确能够解决一些布局问题,但是也带了一些副作用影响,比如,父元素高度塌陷,我们有好几种可以清除浮动 ...
- 学习笔记02(随便看看mybatis源码)
两个很有名的持久层hibernate和mybatis应该很熟悉不过了,两者最大相同点是底层都是对jdbc的封装,最大的不同点是前者是自动生成sql语句,后者是需要我们在映射文件中写出sql. 其实从以 ...