Python 爬虫:re模块(正则表达式)

2019 年 8 月 11 日 计算机与网络安全

一次性付费进群,长期免费索取教程,没有费教程。

教程列表见微信公众号底部菜单

微信群回复公众号:微信群QQ群460500587

微信公众号:计算机与网络安全

ID:Computer-network


1、re模块(正则表达式操作)

re模块是文件处理中必不可少的模块,主要应用于字符串的查找、定位等。在使用网络爬虫时,即使没有爬虫框架,re模块配合urllib模块也可以完成简单的爬虫功能。先来看看所谓的正则表达式,以下是Python支持的正则表达式元字符和语法。


(1)字符

.:匹配任意除换行符\n外的字符,.abc匹配abc。

\:转义字符,使后一个字符改变原来的意思,a\.bc匹配a.bc。

[…]:字符集(字符类)。对应字符集中的任意字符,第一个字符是^则取反。a[bc]d匹配abd和acd。


(2)预定义字符集

\d:数字[0-9]。
\D:非数字[^\d]。
\s:空白字符[空格\t\r\n\f\v]。
\S:非空白字符[^\s]。
\w:单词字符[a-zA-Z0-9_]。
\W:非单词字符[^\w]。

(3)数量词

*:匹配前一个字符0或无限次。a1*b匹配ab、a1b、a11b……
+:匹配前一个字符1或无限次。a1*b匹配a1b、a11b……
?:匹配前一个字符0或1次。a1*b匹配ab、a1b。
{m}:匹配前一个字符m次。a1{3}b匹配a111b。
{m,n}:匹配前一个字符m至n次。a1{2,3}b匹配a11b、a111b。

(4)边界匹配

^:匹配字符串开头,如^abc匹配以abc开头的字符串。
$:匹配字符串结尾,如xyz$匹配以xyz结尾的字符串。
\A:仅匹配字符串开头,如\Aabc。
\Z:仅匹配字符串结尾,如Xyz\Z。

Python的re模块提供了两种不同的原始操作:match和search。match是从字符串的起点开始做匹配,而search(perl默认)是对字符串做任意匹配。最常用的几个re模块方法如下:


re.compile(pattern, flags=0):将字符串形式的正则表达式编译为Pattern对象。


re.search(string[, pos[, endpos]]):从string的任意位置开始匹配。


re.match(string[, pos[, endpos]]):从string的开头开始匹配。


re.findall(string[, pos[, endpos]]):从string任意位置开始匹配,返回一个列表。


re.finditer(string[, pos[, endpos]]):从string任意位置开始匹配,返回一个迭代器。一般匹配findall就可以了,大数量的匹配还是使用finditer比较好。


简单地测试一下,打开IDLE,执行命令:


import re
s='I am python modules test for re modules'
re.search('am',s)
re.search('am',s).group()
re.match('am',s)
re.match('I am',s)
re.match('I am',s).group()
re.findall('modules',s)
re.finditer('modules',s)
for sre in re.finditer('modules',s):
print(sre.group())

执行结果如图1所示。

图1  re匹配字符串

2、re模块实战

现在用re模块和urllib模块来做一个简单的网络爬虫,例如看看电影院播放的电影。先找找最近的影院,就以金逸影院为例。找到影院页面http://www.wandacinemas.com/,先使用urllib模块抓取整个网页,再使用re模块获取影视信息。


编写crawlWithRe.py,Putty连接到Linux,执行命令:

cd code/crawler
vi crawlWithRe.py

crawlWithRe.py的代码如下:

按Esc键,进入命令模式后输入:wq,保存crawlWithRe.py。crawlWithRe.py使用urllib模块获取URL的返回信息,然后使用re模块从结果中过滤得到当日电影的列表,最后显示到屏幕上。执行命令:


python3 crawlWithRe.py

得到的结果如图2所示。

图2  运行crawlWithRe.py

看起来不像是网络爬虫,对吗?严格来说这个就是网络爬虫了,只是爬取的内容很简单、也很少罢了。当爬取的内容比较少的时候,网络爬虫也可以这么写。稍微复杂点的、爬取内容多一点的,按照这个方法写就很痛苦了,简单点的办法就是使用爬虫框架。


微信公众号:计算机与网络安全

ID:Computer-network


【推荐书籍】
登录查看更多
1

相关内容

正则表达式(Regular Expression,一般简写为RegEx或者RegExp),也译为正规表示法、常规表示法,台湾译「规则运算式」,在计算机科学中,是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。
【2020新书】实战R语言4,323页pdf
专知会员服务
100+阅读 · 2020年7月1日
Python地理数据处理,362页pdf,Geoprocessing with Python
专知会员服务
113+阅读 · 2020年5月24日
【实用书】Python技术手册,第三版767页pdf
专知会员服务
234+阅读 · 2020年5月21日
Python导论,476页pdf,现代Python计算
专知会员服务
260+阅读 · 2020年5月17日
【实用书】Python爬虫Web抓取数据,第二版,306页pdf
专知会员服务
117+阅读 · 2020年5月10日
【干货书】流畅Python,766页pdf,中英文版
专知会员服务
225+阅读 · 2020年3月22日
算法与数据结构Python,369页pdf
专知会员服务
162+阅读 · 2020年3月4日
【书籍推荐】简洁的Python编程(Clean Python),附274页pdf
专知会员服务
180+阅读 · 2020年1月1日
用 Python 开发 Excel 宏脚本的神器
私募工场
26+阅读 · 2019年9月8日
Python中机器学习的特征选择工具
云栖社区
8+阅读 · 2018年7月16日
实战 | 用Python做图像处理(二)
七月在线实验室
17+阅读 · 2018年5月25日
推荐一些适合小白练手的Python项目
数据挖掘入门与实战
6+阅读 · 2018年5月17日
干货 | Python 爬虫的工具列表大全
机器学习算法与Python学习
10+阅读 · 2018年4月13日
教你用Python来玩跳一跳
七月在线实验室
6+阅读 · 2018年1月2日
Python NLP入门教程
计算机与网络安全
9+阅读 · 2017年11月21日
Python3爬虫之入门和正则表达式
全球人工智能
7+阅读 · 2017年10月9日
Python NLP 入门教程
开源中国
14+阅读 · 2017年10月1日
Arxiv
29+阅读 · 2020年3月16日
Embedding Logical Queries on Knowledge Graphs
Arxiv
3+阅读 · 2019年2月19日
VIP会员
相关VIP内容
【2020新书】实战R语言4,323页pdf
专知会员服务
100+阅读 · 2020年7月1日
Python地理数据处理,362页pdf,Geoprocessing with Python
专知会员服务
113+阅读 · 2020年5月24日
【实用书】Python技术手册,第三版767页pdf
专知会员服务
234+阅读 · 2020年5月21日
Python导论,476页pdf,现代Python计算
专知会员服务
260+阅读 · 2020年5月17日
【实用书】Python爬虫Web抓取数据,第二版,306页pdf
专知会员服务
117+阅读 · 2020年5月10日
【干货书】流畅Python,766页pdf,中英文版
专知会员服务
225+阅读 · 2020年3月22日
算法与数据结构Python,369页pdf
专知会员服务
162+阅读 · 2020年3月4日
【书籍推荐】简洁的Python编程(Clean Python),附274页pdf
专知会员服务
180+阅读 · 2020年1月1日
相关资讯
用 Python 开发 Excel 宏脚本的神器
私募工场
26+阅读 · 2019年9月8日
Python中机器学习的特征选择工具
云栖社区
8+阅读 · 2018年7月16日
实战 | 用Python做图像处理(二)
七月在线实验室
17+阅读 · 2018年5月25日
推荐一些适合小白练手的Python项目
数据挖掘入门与实战
6+阅读 · 2018年5月17日
干货 | Python 爬虫的工具列表大全
机器学习算法与Python学习
10+阅读 · 2018年4月13日
教你用Python来玩跳一跳
七月在线实验室
6+阅读 · 2018年1月2日
Python NLP入门教程
计算机与网络安全
9+阅读 · 2017年11月21日
Python3爬虫之入门和正则表达式
全球人工智能
7+阅读 · 2017年10月9日
Python NLP 入门教程
开源中国
14+阅读 · 2017年10月1日
Top
微信扫码咨询专知VIP会员