PythonChallenge 2:爬虫和正则表达式
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PythonChallenge 2:爬虫和正则表达式相关的知识,希望对你有一定的参考价值。
题目:
解题思路:
题目里已经说的很清楚了,字符可能在网页的源代码里。右键查看网页源代码,发现其中有一段:find rare characters in the mess below。有些人是直接把下面这长长一段复制下来,然后进行处理。我觉得吧,这法子实在有些简单粗暴…我的解决方法是先用urllib2抓取网页,然后通过正则表达式获取文本并进行处理。
实现方法:
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
方法解释:
- urllib2通过简单的 urllib2.urlopen(url).read() 即可获取网页内容。
- 为了获取待处理的文本,需要通过正则表达式对抓取的网页内容进行处理。对于换行符的处理,这里有一个很简单的方法,即在findall方法里添加re.S参数,这会使得’.’能够匹配包括换行符在内的任意字符。如果没有re.S参数,’.’ 将匹配不包括换行符的任意字符。
- findall方法返回的是一个包含匹配到的字符的列表,为了方便下一步的处理,通过”.join方法将列表中的元素添加到一个空白字符串中。”.join表示各元素之间无分隔符号,’.’.join 则表示加入字符串时通过.进行分隔,”之间可以是任意符号。
- 最后,匹配字符串中的大小写字母及数字。我一开始只匹配了[a-z],即匹配所有小写字母。虽然最后得到的结果一样,但题目里并没有说characters是大写小写或是数字,因此加上[A-Z]和[0-9]会更严谨一点。
输出:
equality
将url里的ocr替换成equality进入下一关。
以上是关于PythonChallenge 2:爬虫和正则表达式的主要内容,如果未能解决你的问题,请参考以下文章