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

闯关过程

入口地址:http://www.pythonchallenge.com/pc/def/ocr.html

页面内容如下:



页面提示内容解析:

1.识别字符,可能在书中,也可能在页面内容中。

明显的,这个页面中这张图片(书),是找不到有用的价值信息的,因此应该在网页里面

使用审查元素,查看页面代码,会发现里面有一长串的乱码符号,有用的价值信息,应该在这一串乱码里面

2.最后有提示说,如果想看之前关卡的其他答案,需要访问 : http://www.pythonchallenge.com/pcc/def/ocr.html

即把当前关卡的网址中, pc 替换为pcc。

网页中乱码字符如下:


可以直接把字符串复制出来,也可以将其解析出来

我的代码如下:

import urllib2
import HTMLParser
import re
from string import lowercase

def level2(self):
	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 
	leve2_url='http://www.pythonchallenge.com/pc/def/ocr.html'
	html=get_html_Pages(leve2_url)#获取页面内容
	tips_string_pattern=re.compile('<font size="-1" color="gold">.*?<!--.*?-->.*?<!--(.*?)-->',re.S)#建立匹配规则,获取乱码字符串
	tips_string=re.search(tips_string_pattern,html).group(1).strip()
	next_level_string=''
	for i in tips_string:#从乱码字符串里面挑出正常字符
		if i  in lowercase:
			next_level_string +=i
	print next_level_string

然后就得到了:

equality

接下来

将网址中的 ocr 换成 equality 就可以了:

next_level_translate_str=leve2_url.split('/')[-1].split('.')[0]
next_level_url=leve2_url.replace(next_level_translate_str,next_level_string)
print next_level_url
即下一关的网址为: http://www.pythonchallenge.com/pc/def/equality.html

其他答案

一行代码,一个方案

print "".join([char for char in text if char.isalpha()])              #使用isalpha()函数进行判断
print "".join([char for char in text if char in string.lowercase])    #使用lowercase  这个字符串进行判断, 这个字符串包含26个小写字母
print ''.join([x for x in text if x in string.letters])  	          #使用letters这个字符串进行判断, 这个字符串包含26个小写字母和26个大写字母
print re.findall(r'[a-z]', text)                                      #使用正则匹配通过查找的方式查找所有的小写字母
print re.sub('[^a-z]', '', text)                                      #使用正则替换的方式,从text字符串中找出以小写字符串开头的字母







posted @ 2017-05-12 17:35  枫奇丶宛南  阅读(37)  评论(0编辑  收藏  举报