题目:
PythonChallenge 2:爬虫和正则表达式-LMLPHP

解题思路:
题目里已经说的很清楚了,字符可能在网页的源代码里。右键查看网页源代码,发现其中有一段:find rare characters in the mess below。有些人是直接把下面这长长一段复制下来,然后进行处理。我觉得吧,这法子实在有些简单粗暴…我的解决方法是先用urllib2抓取网页,然后通过正则表达式获取文本并进行处理。
PythonChallenge 2:爬虫和正则表达式-LMLPHP

实现方法:

import urllib2
import re
req = urllib2.urlopen('http://www.pythonchallenge.com/pc/def/ocr.html')
res = req.read()
mess = ''.join(re.findall('-->(.*)-->',res,re.S))
chars = ''.join(re.findall(r'[a-z]|[A-Z]|[0-9]',mess))
print chars

方法解释:

  1. urllib2通过简单的 urllib2.urlopen(url).read() 即可获取网页内容。
  2. 为了获取待处理的文本,需要通过正则表达式对抓取的网页内容进行处理。对于换行符的处理,这里有一个很简单的方法,即在findall方法里添加re.S参数,这会使得’.’能够匹配包括换行符在内的任意字符。如果没有re.S参数,’.’ 将匹配不包括换行符的任意字符。
  3. findall方法返回的是一个包含匹配到的字符的列表,为了方便下一步的处理,通过”.join方法将列表中的元素添加到一个空白字符串中。”.join表示各元素之间无分隔符号,’.’.join 则表示加入字符串时通过.进行分隔,”之间可以是任意符号。
  4. 最后,匹配字符串中的大小写字母及数字。我一开始只匹配了[a-z],即匹配所有小写字母。虽然最后得到的结果一样,但题目里并没有说characters是大写小写或是数字,因此加上[A-Z]和[0-9]会更严谨一点。

输出:
equality

将url里的ocr替换成equality进入下一关。

05-11 11:38