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

 

方法解释:

  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进入下一关。

 

以上是关于PythonChallenge 2:爬虫和正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

pythonchallenge Level 3

python爬虫正则表达式

对着爬虫网页HTML学习Python正则表达式re

Python 爬虫-正则表达式

爬虫从入门到入狱——正则表达式

python 爬虫 03-正则表达式