黑板客第二關網址是 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的方式,相當于直接通過頁面輸入,頁面點擊的方式
新聞熱點
疑難解答