首页 > 技术文章 > 正则表达式(Regular Expression)

HuZihu 2019-01-04 15:33 原文

以下摘录了爬虫经常用的正则表达式,如需更详细的信息,请查看崔庆才的个人网页: https://cuiqingcai.com/5530.html

 

使用Python的re模块:

 

导入re模块:

import re

 

re.complie(pattern)  --- 将正则字符串编译成正则表达式对象

pattern=re.compile('[a-zA-z]+://[^\s]*')

 

re.findall(pattern, str)   --- 匹配整个字符串,返回所有匹配的对象(列表),如果没有匹配的对象则返回空列表

text="如需更详细的信息,请查看崔庆才的个人网页: https://cuiqingcai.com/5530.html"
result=re.findall(pattern,text)

结果:

['https://cuiqingcai.com/5530.html']

 

re.sub(pattern, replacement, str)   --- 替换匹配的对象

text="如需更详细的信息,请查看崔庆才的个人网页: https://cuiqingcai.com/5530.html"
result=re.sub(pattern,'web',text)

结果:

如需更详细的信息,请查看崔庆才的个人网页: web

 

爬虫常用正则表达式符号以及描述:

模式

描述

\n

匹配一个换行符

^

匹配一行字符串的开头

$

匹配一行字符串的结尾

.

匹配任意字符,除了换行符

*

匹配0个或多个表达式

?

匹配0个或1个前面的正则表达式定义的片段,非贪婪方式

( )

匹配括号内的表达式

 

贪婪匹配与非贪婪匹配:

.*   --- 贪婪匹配(匹配尽可能多的字符)

.*?   --- 非贪婪匹配(匹配尽可能少的字符)

 

常用修饰符:

re.S     ---   匹配包括换行符在内的所有字符

re.I     ---   使匹配对大小写不敏感

 

转义字符:

\' 单引号
\" 双引号
\\ 反斜杠

作用:

1,将普通字符转为特殊用途,一般用于表示不能直接显示的字符,比如后退键,回车键等

2,将特殊意义的字符转换回它原来的意义,比如在一对双引号里面还想使用双引号,那么就只能使用转义字符了

 

在爬取网页后,我们需要抽取自己所需的信息,这时就要根据规律定义合适的正则表达式。通常的做法是:首先找到定位节点(通常可以使用class属性),然后使用非贪婪匹配匹配其他不相关的字符,用括号把自己所需的信息包围起来,最后加上re.S修饰符(因为HTML文本里包含换行符,不加此修饰符就无法匹配换行后的文本)。

 

比如《爬虫基础以及一个简单的实例》一文中的一个例子:

 

上映时间,在一个p节点下面,class为"releasetime":

<p class="releasetime">上映时间:1993-01-01</p>

相应的正则表达式可以写为:.*?releasetime.*?>(.*?)</p>

 

这样就可以把"上映时间:1993-01-01"抽取出来。

 

推荐阅读