关于网络数据爬取的学习来自博主Eastmount的博客https://me.youkuaiyun.com/eastmount以及博主的书籍《Python网络数据爬取及分析从入门到精通(爬取篇)》
正则表达式(Regular Expression ,Regex或RE)又称为 正规表示法或常见表示法,常用来检索、替换那些符合某个模式的文本。他首先设定好一些特殊的字符及文字组合,然后通过组合的‘规定字符串’来对表达式进行过滤,从而获取或匹配用户想要的特定内容。
1、re模块
Python通过re模块提供对正则表达式的支持,但是在使用正则表达式之前需要导入re模块才能调用该模块的函数
import re
基本步骤是:先将正则表达式的字符串形式编译为pattern实例,然后使用pattern实例处理文件并获得一个匹配(match)实例,在使用match实例获取所需信息。常用的函数是findall,原型如下:
findall(string [ , pos[ , endpos]]) | re.findall(pattern ,string [, flags])
该函数表示搜索字符串string,然后以列表形式返回全部能匹配的子字符串,其中参数re包括3个常见值(括号内是完整的写法):
(1)re.I:使匹配忽略大小写
(2)re.M:允许多行匹配
(3)re.S:匹配包括换行在内的所有字符串
另外,pattern对象是一个编译好的正则表达式,通过pattern提供的一系列方法可以对文本进行匹配查找;pattern对象不能直接实例化,必须使用re.complie()进行构造。
2、complie方法
complie( patternn [ , flags])
该函数根据包含正则表达式的字符串创建模式对象,返回一个patternn对象,参数flags是匹配模式,可以使用按位或“|”表示同时生效 ,也可以在可以在正则表达式字符串指定。
使用正则表达式来获取字符串中的数字内容:
>>> import re
>>> string = "A1.45,3,14,B5,c7,D2"
>>> regex = re.compile(r"\d+\.?\d*")
>>> print(regex.findall(string))
['1.45', '3', '14', '5', '7', '2']
>>>
3、match方法
match 方法是从字符串的pos下标开始匹配pattern,如果pattern结束的时候已经匹配,则返回一个 match对象;如果匹配过程中pattern无法匹配,或者匹配未结束就已到达endpos,则返回None。
match(string [ , pos[ , endpos]] ) | re.match(pattern ,string[ , falgs])
参数string表示字符串;pos表示下标,pos和endpos的默认值分别是0和len(string);参数flags用于编译pattern时指定匹配模式。
4、search方法
search方法用于查找字符串中可以匹配成功的子字符串。从字符串的pos下标处尝试匹配pattern,如果pattern结束时仍可匹配,则返回一个match 对象;如果pattern结束时仍无法匹配,则将 pos加1后重新尝试匹配,若直到pos=endpos时仍无法匹配,则返回None
search(string [ , pos[ , endpos]] ) | re.search(pattern ,string[ , falgs])
参数string表示字符串;pos表示下标,pos和endpos的默认值分别是0和len(string);参数flags用于编译pattern时指定匹配模式。
5、group和groups方法
group([group1,.......])方法用于获得一个或多个分组截获的字符串,当他指定多个参数时将以元组形式返回,没有截获字符串的组返回None,截获多次的组返回最后一次截获的子字符串。groups([default])方法以元组形式返回全部分组截获的字符串,相当于多次调用 group,参数default表示没有截获字符串的组以该值代替,默认为None