Python挑战游戏( PythonChallenge)闯关之路Level- 4

闯关过程

关口地址:http://www.pythonchallenge.com/pc/def/linkedlist.html


输入关卡地址发现, 提示信息要求将网址改为:http://www.pythonchallenge.com/pc/def/linkedlist.php



闯关程序:

#coding:utf-8

import urllib2
import HTMLParser
import re,time
from bs4 import BeautifulSoup as BS


	def get_html_Pages(url):
		try: 
			headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.2; rv:16.0) Gecko/20100101 Firefox/16.0'}
			#构建请求的request  
			request=urllib2.Request(url,headers=headers)  
			#利用urlopen获取页面代码  
			response=urllib2.urlopen(request)  
			#将页面转化为UTF-8编码格式  
			html=response.read().decode('utf-8')
			html=HTMLParser.HTMLParser().unescape(html)#处理网页内容, 可以将一些html类型的符号如" 转换回双引号		
			return html  
		#捕捉异常,防止程序直接死掉  
		except urllib2.URLError,e:
			print u"连接失败,错误原因",e.reason  
			return None  
		except urllib2.HTTPError,e:    
			print u"连接失败,错误原因:%s " % e.code    
			return None 
	def level4():
		level4_url='http://www.pythonchallenge.com/pc/def/linkedlist.php'
		html=get_html_Pages(level4_url)
		tips_string_pattern=re.compile('<!--(.*?)-->',re.S)#定义匹配规则,获取网页中注释的内容 
		tips_string=re.search(tips_string_pattern,html).group(1).strip()
		print u'提示信息是:%s ' % tips_string
		#获取图片网址
		bs_obj_level4=BS(html,'lxml')
		photo_url= bs_obj_level4.find('a').get('href')
		new_url_1= level4_url.replace(level4_url.split('/')[-1],photo_url)
		new_url_2 = new_url_1
		for i in range(400):
			print '%d , next url is  %s ' %  (i,new_url_2)
			next_html=get_html_Pages(new_url_2)
			print next_html
			if 'Divide' in next_html:
				print 'it is Divide,need do again '
				new_url_2= new_url_1.split('=')[0] + '=' + str(int(new_url_2.split('=')[1])/2)
				print 'in Divide new url is %s' % new_url_2
			else:
				#通过正则表达式得到数字 
				str_num_pattern=re.compile(r'next nothing is (\d+)',re.S)  
				str3=re.findall(str_num_pattern,next_html)
				#对数字长度进行判断,可以在最后跳出循环
				
				if str3 ==[] :
					print 'next lexvel'
					break; 
				print str3[0]
				new_url_2= new_url_1.split('=')[0] + '=' +   str(str3[len(str3)-1])			
			if i%20 ==0:
				time.sleep(2)
		print 'finished'
		
	level4()


下一关网址 : 

66831

peak.html


http://www.pythonchallenge.com/pc/def/peak.html

总结:

本章关卡和黑板客第一关很相似: 都是需要不停获得新的页面, 不停的将页面内容中的数字提取出来,然后组装新的url, 如此重复

不同的是,本节关卡, 中间多了两个小意外, 

一次是:  跑着跑着, 会要求将上一次的地址尾数,除以2,得到新的数字,再次继续

第二次是, 页面上出现了两个数字, 因此,这就需要对匹配规则做出一点点限制, 不能使用之匹配数字的正则表达式。

posted @ 2017-05-16 14:58  枫奇丶宛南  阅读(27)  评论(0编辑  收藏  举报