Python Challenge第二关

来源:互联网 发布:网络推广效果分析 编辑:程序博客网 时间:2024/04/29 02:54

网址:http://www.pythonchallenge.com/pc/def/ocr.html

问题描述:

将网页html源码中的注释字符读出来,然后找到其中出现次数较少的字符。


1、读取网页的html代码

python提供了urllib和urllib2来读取url指向的任何东西(网页、图片等等)。如果只是简单的下载或读取网页内容,urllib就足够了,如果要使用HTTP验证、cookie等,最好使用urllib2。

from urllib import urlopenwebpage=urlopen('http://www.pythonchallenge.com/pc/def/ocr.html')html=webpage.read()


2、提取需要分析的部分

需要分析的文本是以注释的形式出现的(包含在<!--与-->中间),而<--这个3字符均是正则表达式的特殊字符,所以需要转义一下,另外文本中还夹杂着很多换行符,而.(dot)恰好不能匹配换行符(历史原因,详见:http://www.regular-expressions.info/dot.html),网上有的人给的答案是[.\n],这个根本不行,不知道这些人哪来的自信,随手一写就敢回答别人的问题。所有在[]里的字符都会失去其与原来的意义,.(dot)在中括号里不在代表任何字符了,它现在就是个普通的.(dot),此时的它只代表它自己,而不是让普通字符变为特殊字符。匹配带有换行符的任意字符通用模式是[\s\S],本文测试模式[\w\W\n]也是可以的。

为了解决这个历史遗留问题,很多编程语言都做了特殊处理,来让.(dot)可以匹配包括换行符在内的所有的字符,python中的处理就是在匹配的时候加个re.S。

import rerst = re.search(r'(?<=\<!\-\-).+?(?=\-\-\>)',html,re.S)cnt=rst[1].replace('\n','')


3、统计各个字符的个数,并排序

这个一步没有找到太好的办法,只能一步步的写了。

dct={}.fromkeys(cnt)for c in cnt:     dct[c]+=1dct=sorted(dct.items(),key=lambda x:x[1])print dct
得到的结果是aeilquty,直接放到url,居然不行。看来需要重组一下形成一个单词,以我的经验lity一般是在一块的,那就剩下aequ了,死活没想出来是哪个单词。然后把aequlity复制到google搜索框。。。结果:

参考:

http://www.regular-expressions.info/dot.html

http://deerchao.net/tutorials/regex/regex.htm



0 0