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:爬虫和正则表达式的更多相关文章
- python 3.x 爬虫基础---正则表达式
python 3.x 爬虫基础 python 3.x 爬虫基础---http headers详解 python 3.x 爬虫基础---Urllib详解 python 3.x 爬虫基础---Requer ...
- 玩转python爬虫之正则表达式
玩转python爬虫之正则表达式 这篇文章主要介绍了python爬虫的正则表达式,正则表达式在Python爬虫是必不可少的神兵利器,本文整理了Python中的正则表达式的相关内容,感兴趣的小伙伴们可以 ...
- [Python] 网络爬虫和正则表达式学习总结
以前在学校做科研都是直接利用网上共享的一些数据,就像我们经常说的dataset.beachmark等等.但是,对于实际的工业需求来说,爬取网络的数据是必须的并且是首要的.最近在国内一家互联网公司实习, ...
- Python爬虫之正则表达式(3)
# re.sub # 替换字符串中每一个匹配的子串后返回替换后的字符串 import re content = 'Extra strings Hello 1234567 World_This is a ...
- 【Python爬虫】正则表达式与re模块
正则表达式与re模块 阅读目录 在线正则表达式测试 常见匹配模式 re.match re.search re.findall re.compile 实战练习 在线正则表达式测试 http://tool ...
- python爬虫训练——正则表达式+BeautifulSoup爬图片
这次练习爬 传送门 这贴吧里的美食图片. 如果通过img标签和class属性的话,用BeautifulSoup能很简单的解决,但是这次用一下正则表达式,我这也是参考了该博主的博文:传送门 所有图片的s ...
- 【python爬虫和正则表达式】爬取表格中的的二级链接
开始进公司实习的一个任务是整理一个网页页面上二级链接的内容整理到EXCEL中,这项工作把我头都搞大了,整理了好几天,实习生就是端茶送水的.前段时间学了爬虫,于是我想能不能用python写一个爬虫一个个 ...
- Python爬虫运用正则表达式
我看到最近几部电影很火,查了一下猫眼电影上的数据,发现还有个榜单,里面有各种经典和热映电影的排行榜,然后我觉得电影封面图还挺好看的,想着一张一张下载真是费时费力,于是突发奇想,好像可以用一下最近学的东 ...
- Python爬虫基础——正则表达式
说到爬虫,不可避免的会牵涉到正则表达式. 因为你需要清晰地知道你需要爬取什么信息?它们有什么共同点?可以怎么去表示它们? 而这些,都需要我们熟悉正则表达,才能更好地去提取. 先简单复习一下各表达式所代 ...
随机推荐
- 根据不同的分辨率选择不同的css文件
<SCRIPT language=javascript> <!-- Begin if (screen.width == 640) { document.write('<link ...
- 每天一道LeetCode--374. Guess Number Higher or Lower
We are playing the Guess Game. The game is as follows: I pick a number from 1 to n. You have to gues ...
- Android高手进阶:Adapter深入理解与优化
一般是针对包含多个元素的View,如ListView,GridView,ExpandableListview,的时候我们是给其设置一个Adapter.Adapter是与View之间提供数据的桥梁,也是 ...
- 【SNMP】Linux系统下安装net-snmp
这里使用的snmp的版本是net-snmp-5.7.3下载地址:http://www.net-snmp.org/download.html 安装步骤: 1.解压缩安装包: tar -xzvf net- ...
- JavaScript学习笔记 - 进阶篇(2)- 数组
什么是数组 我们知道变量用来存储数据,一个变量只能存储一个内容.假设你想存储10个人的姓名或者存储20个人的数学成绩,就需要10个或20个变量来存储,如果需要存储更多数据,那就会变的更麻烦.我们用数组 ...
- C# Winform里面用Console.WriteLine输出到哪了
C# Winform里面用Console.WriteLine输出也不会报错 显示在 VS IDE 的视图→输出窗口,且只在 Debug 环境下此语句执行. 如果是 Release 环境,在 Win32 ...
- Codevs 1009 产生数
题目描述 Description 给出一个整数 n(n<10^30) 和 k 个变换规则(k<=15). 规则: 一位数可变换成另一个一位数: 规则的右部不能为零. 例如:n=234.有规 ...
- Makefile 基本知识
Technorati 标签: Makefile 基本知识 最常见的书写方式: CC = gcc LD = ld STRIP = strip CFLAGS := -Os -static -DEZ_O ...
- Linux 伙伴算法简介
本文将简要介绍一下Linux内核中的伙伴分配算法. Technorati 标签: 伙伴算法 算法作用 它要解决的问题是频繁地请求和释放不同大小的一组连续页框,必然导致在已分配 ...
- Silverlight形状、画笔、变换、图像处理、几何图形
1.形状(Ellipse.Line.Path.Polygon.Polyline 和 Rectangle) <UserControl x:Class="SharpStudy.MainPa ...