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个线程是一样的。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?