首页 > 编程 > Python > 正文

02_python爬虫_五种方法通过黑板客第二关

2019-11-06 06:49:45
字体:
来源:转载
供稿:网友

黑板客第二关网址是 http://www.heibanke.com/lesson/crawler_ex01/ 

第二关的页面如下:

即要求用户输入用户名和密码,然后闯关成功

用户名没有规则,可以任意输入,而密码是一个30以内的数字,并不是真正我们注册的用户名和密码组合

因此,这就需要我们去依次尝试输入30以内的数字作为密码

这种方式需要我们向网站做出一个互动:自动提交表单

第一种方法

通过urllib 提交内容

#!/usr/bin/python# coding:utf-8import urllibimport reimport sysreload(sys)sys.setdefaultencoding('utf-8') data={'username':'qiqiyingse'}url='http://www.heibanke.com/lesson/crawler_ex01/' for num in xrange(1,31):	data['passWord']=num	post_data=urllib.urlencode(data)	PRint post_data	response=urllib.urlopen(url,post_data)	html=response.read()	result=re.findall('密码错误',html)	if not result:		print '闯关成功,下一关网址是:http://www.heibanke.com'+re.findall(r'<a href="(.*?)" class',html)[0]		break 

所耗时长:

闯关成功,下一关网址是:http://www.heibanke.com/lesson/crawler_ex02/run time is  0:00:12.546250

第二种方法

urllib2 的方式,用urllib 打包数据

#!/usr/bin/python# coding:utf-8import urllib2import reimport urllibimport datetimebegin_time=datetime.datetime.now()data={'username':'qiqiyingse'}url='http://www.heibanke.com/lesson/crawler_ex01/' for num in range(1,31):	data['password']=num	post_data=urllib.urlencode(data)	print post_data	response=urllib2.urlopen(url,post_data)	html=response.read()	result=re.findall('密码错误',html)	if not result:		print '闯关成功,下一关网址是:http://www.heibanke.com'+re.findall(r'<a href="(.*?)" class',html)[0]		print 'run time is ',datetime.datetime.now()-begin_time		break 

所耗时长:

闯关成功,下一关网址是:http://www.heibanke.com/lesson/crawler_ex02/run time is  0:00:10.163122

这种方法的数据打包也可以用下面这两句代码

post_data=urllib.urlencode(data)request=urllib2.Request(url,post_data)response=urllib2.urlopen(request)只是里面多了一个urllib2里面的Request 方法来进行打包

第三种方法

使用request的post方法来提交数据

#!/usr/bin/python# coding:utf-8import requestsimport reimport datetimeimport sysreload(sys)sys.setdefaultencoding('utf-8')begin_time=datetime.datetime.now()url = 'http://www.heibanke.com/lesson/crawler_ex01/'payload = {'username': 'test', 'password': 0}for n in range(30):	payload['password'] = n	content = requests.post(url, payload).text	pattern = r'<h3>(.*)</h3>'	result = re.findall(pattern, content)	print "try enter ",n,result[0]	if u"错误" not in result[0]:		print result[0]+'/n下一关网址是:http://www.heibanke.com'+re.findall(r'<a href="(.*?)" class',content)[0]		print 'run time is ',datetime.datetime.now()-begin_time		break所耗费时长

下一关网址是:http://www.heibanke.com/lesson/crawler_ex02/run time is  0:00:09.232878

第四种方法

使用webdriver的方式,相当于直接通过页面输入,页面点击的方式


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表