python3 黑板客爬虫闯关游戏(四)
这关较第三关难度增加许多,主要多了并发编程
密码一共有100位,分布在13页,每页打开的时间在15秒左右,所以理所当然的想到要用并发,但是后来发现同IP访问间隔时间不能小于8秒,不然会返回404,所以最好是代理+并发。
目前没有做代理,以后有时间在重新写,由于密码位置上随机出现的,所以采集到页数要远远大于13,我把访问间隔控制在8秒,收集完100位密码一共耗时670s
import urllib.request as ur
import urllib.parse as up
import http.cookiejar as hc
from threading import Thread
import time
import urllib.error as ue
from bs4 import BeautifulSoup
#定义一个100位的空密码
pwd=['' for i in range(100)] class GetPwdThread(Thread):
def __init__(self,url,opener):
self.url=url
self.opener=opener
super(GetPwdThread,self).__init__()
def run(self):
try:
start=time.time()
resp=self.opener.open(self.url).read().decode('utf-8')
print(self.url)
soup=BeautifulSoup(resp,'html.parser')
password_pos=soup.select('td[title="password_pos"]')
password_val=soup.select('td[title="password_val"]')
for i,j in zip(password_pos,password_val):
soup_pos=BeautifulSoup(str(i),'html.parser')
soup_val=BeautifulSoup(str(j),'html.parser')
pwd[int(soup_pos.td.string)-1]=soup_val.td.string
print(pwd,'pwd length:',len(''.join(pwd)),'use time:%s' %(time.time()-start))
except ue.URLError as e:
print(self.url,e.code) url='http://www.heibanke.com/accounts/login/?next=/lesson/crawler_ex03/'
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')
#加载cookies登录网站
cookie.load('cookie.txt',ignore_discard=True,ignore_expires=True)
handler=ur.HTTPCookieProcessor(cookie)
opener=ur.build_opener(handler)
req=ur.Request(url,data)
res=opener.open(req)
#登录成功,重新保存cookies到本地
cookie.save('cookie.txt',ignore_discard=True, ignore_expires=True)
#测试密码开始
cookie.load('cookie.txt',ignore_discard=True,ignore_expires=True)
handler=ur.HTTPCookieProcessor(cookie)
opener=ur.build_opener(handler)
url='http://www.heibanke.com/lesson/crawler_ex03/pw_list/?page='
starttime=time.time()
Threads=[]
#判断所有位置的密码是否都已找到
while('' in pwd):
#由于密码位置是随机出现的,所以理论上只要一直刷新第一页就可以得到所有密码
for i in range(1,3):
newthread=GetPwdThread(url+str(i),opener)
Threads.append(newthread)
newthread.start()
#访问间隔如果小于8秒,会返回404
time.sleep(8)
for t in Threads:
t.join()
print('password:',''.join(pwd),'total time:%s' %(time.time()-starttime))
测试结果如下
#...
http://www.heibanke.com/lesson/crawler_ex03/pw_list/?page=2
['9', '3', '1', '4', '7', '7', '9', '2', '5', '5', '7', '9', '3', '0', '3', '3', '2', '6', '5', '3', '1', '4', '9', '0', '1', '6', '3', '6', '6', '8', '7', '7', '4', '5', '6', '6', '2', '8', '8', '1', '7', '3', '6', '1', '8', '5', '3', '8', '2', '5', '3', '6', '7', '5', '2', '6', '4', '9', '7', '2', '3', '3', '8', '1', '8', '3', '0', '8', '6', '7', '4', '4', '5', '1', '3', '5', '3', '5', '7', '7', '4', '8', '9', '5', '0', '6', '9', '5', '2', '4', '4', '3', '2', '9', '5', '4', '8', '9', '4', '6'] pwd length: 100 use time:15.125
password: 9314779255793033265314901636687745662881736185382536752649723381830867445135357748950695244329548946 total time:667.8639998435974
[Finished in 670.7s]
python3 黑板客爬虫闯关游戏(四)的更多相关文章
- 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:黑板课爬虫闯关第四关
第四关地址:http://www.heibanke.com/lesson/crawler_ex03/ 一开始看到的时候有点蒙,不知道啥意思,说密码需要找出来但也没说怎么找啊. 别急,随便输了个昵称和密 ...
- 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 ...
- <爬虫>黑板爬虫闯关02
import requests from lxml import etree ''' 黑板爬虫闯关02 网址:http://www.heibanke.com/lesson/crawler_ex01/ ...
随机推荐
- WebAPI IIS PUT和DELETE请求失败 405
IIS拒绝PUT和DELETE请求是由于IIS为网站默认注册的一个名为WebDAVModule的自定义HttpModule导致的,如果我们的站点不需要提供针对WebDAV的支持,解决这个问题最为直接的 ...
- oracle Entity db.Database.SqlQuery ORA-01843: 无效的月份
原因是oracle的日期格式化格式和本地语言环境的日期格式不一致导致的. 一般情景为oralce格式为英文格式 本地服务器或者开发机的环境为中文环境. 使用Dbcontext 实例一般不会有问题. 但 ...
- Java中private、protected、public和default的区别
public: 具有最大的访问权限,可以访问任何一个在classpath下的类.接口.异常等.它往往用于对外的情况,也就是对象或类对外的一种接口的形式. protected: 主要的作用就是用来保护子 ...
- 图说C++对象模型:对象内存布局详解
0.前言 文章较长,而且内容相对来说比较枯燥,希望对C++对象的内存布局.虚表指针.虚基类指针等有深入了解的朋友可以慢慢看. 本文的结论都在VS2013上得到验证.不同的编译器在内存布局的细节上可能有 ...
- C#面向对象设计模式纵横谈——2.Singleton 单件(创建型模式)
一:模式分类 从目的来看: 创建型(Creational)模式:负责对象创建. 结构型(Structural)模式:处理类与对象间的组合. 行为型(Behavioral)模式:类与对象交互中的职责分配 ...
- Codeforces 刷水记录
Codeforces-566F 题目大意:给出一个有序数列a,这个数列中每两个数,如果满足一个数能整除另一个数,则这两个数中间是有一条边的,现在有这样的图,求最大联通子图. 题解:并不需要把图搞出来, ...
- MySQL、MongoDB、Redis数据库Docker镜像制作
MySQL.MongoDB.Redis数据库Docker镜像制作 在多台主机上进行数据库部署时,如果使用传统的MySQL的交互式的安装方式将会重复很多遍.如果做成镜像,那么我们只需要make once ...
- oracleXE(oracle学习版)在windows的安装配置
oracleXE其实安装基本就是一路下一步. 在安装前记得先把tomcat打开,不然oracleXE会占用8080端口且安装过程无法更改端口. 如果需要远程连接此oracle XE的话,要关闭这台电脑 ...
- ios相同版本升级
公司新发布ios,因为各种错误以及审核不通过造成app未能上传,而app在提交的时候不能上传相同的版本号,造成app还没有正式的上传上传已经将版本号升级到1.0.6 解决方法: 在Xcode上,查看项 ...
- 如何使用Linux命令行查看Linux服务器内存使用情况?
一个服务器,最重要的资源之一就是内存,内存够不够用,是直接关系到系统性能的关键所在. 本文介绍如何查看Linux服务器内存使用情况, 1.free命令 free -m [root@localhost ...