Python爬虫之正则表达式用法

正则表达式用来定义“字符串符合规则”。本文从常用符号和示例两个方面着手分析。



A、正则表达式常用符号

B、举例:aa*bbbbb(cc)*(d | )

第一次看这个字符串会觉得有点儿奇葩,但是当我们把它分解之后就会很清楚了。

• aa*

a 后面跟着的a*(读作a 星)表示“重复任意次a,包括0 次”。这样就可以保证字母a至少出现一次。

• bbbbb

这没有什么特别的——就是5 次b。

• (cc)*

任意偶数个字符都可以编组,这个规则是用括号两个c,然后后面跟一个星号,表示有任意次两个c(也可以是0 次)。

• (d|)

增加一个竖线(|)在表达式里表示“这个或那个”。本例是表示“增加一个后面跟着空格的d,或者只有一个空格”。这样我们可以保证字符串的结尾最多是一个后面跟着空格的d


C、举例:邮箱规则[A-Za-z0-9\._+]+@[A-Za-z]+\.(com|org|edu|net)


正则表达式和BeautifulSoup

举例:打印以../img/gifts/img 开头,以.jpg 结尾的图片的相对路径

from urllib.request import urlopen

from bs4 import BeautifulSoup

import re

html = urlopen("http://www.pythonscraping.com/pages/page3.html")

bsObj = BeautifulSoup(html)

images = bsObj.findAll("img",{"src":re.compile("\.\.\/img\/gifts/img.*\.jpg")})

for image in images:

       print(image["src"])


结果如下所示:

../img/gifts/img1.jpg

../img/gifts/img2.jpg

../img/gifts/img3.jpg

../img/gifts/img4.jpg

../img/gifts/img6.jpg



另外,附上Lambda表达式,和本文主题无关,可以不看:

Lambda 表达式本质上就是一个函数,可以作为其他函数的参数使用;也就是说,一个函数不是定义成f(x, y),而是定义成f(g(x), y),或f(g(x), h(x)) 的形式。

BeautifulSoup 允许我们把特定函数类型当作findAll 函数的参数。唯一的限制条件是这些函数必须把一个标签作为参数且返回结果是布尔类型。BeautifulSoup 用这个函数来评估它遇到的每个标签对象,最后把评估结果为“真”的标签保留,把其他标签剔除。

举例:soup.findAll(lambda tag: len(tag.attrs) == 2)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容