6 爬虫技术基础3—正则表达式

爬虫技术基础3—正则表达式

  • 正则表达式基础1—findall()函数
  • 正则表达式基础2—非贪婪匹配之(.*?)
  • 正则表达式基础3—非贪婪匹配之.*?
  • 正则表达式基础4—自动考虑换行的修饰符re.S
  • 正则表达式基础5—数据清洗

正则表达式基础1—findall()函数

findall()函数的功能是在原始文本中寻找所有符合匹配规则的文本内容
使用规则:re.findall(匹配规则, 原始文本)
例如,提取“Hello 123 world 456 Python大数据教学789”里的所有三位数字

import re
content = 'Hello 123 world 456 Python大数据教学789'
result = re.findall('\d\d\d',content)
print(result)

输出结果:

[‘123’, ‘456’, ‘789’]

规则符号:

正则表达式基础2—非贪婪匹配之(.*?)

获取文本A与文本B之间的内容,并不需要知道它的确切长度及格式,但需要知道在哪两个内容之间
使用规则:

文本A(.*?)文本B

例如,提取规则文本中的内容

import re
res = '文本A城市轨道交通与物流学院文本B,新闻标题文本A夺冠文本B,文本ACCTV中央电视台报导文本B'
p_source = '文本A(.*?)文本B'
source = re.findall(p_source, res)
print(source)

输出结果:

[‘城市轨道交通与物流学院’, ‘夺冠’, ‘CCTV中央电视台报导’]

通常我们爬取网页都是规则的,只要找到其中的规律,即可批量提取其信息

正则表达式基础3—非贪婪匹配之.*?

(.*?)用于获取文本A与文本B之间的内容,而不加括号则是因为文本A与文本B之间的内容,经常变动或者说没有规律,无法匹配或者说我们不想要其中的内容,就需要用到它了
使用规则:

文本C.*?文本D

例如:

import re
res = '

文本C<变化的网址>文本D新闻标题

'
p_title = '

文本C.*?文本D(.*?)

'
title = re.findall(p_title, res) print(title)

输出结果:

[‘新闻标题’]

网页实战例子:

import re
res = '

阿里巴巴代码竞赛现全球首位AI评委 能为代码质量打分' p_title = '

.*?>(.*?)' title = re.findall(p_title, res) print(title)

输出结果:

[’< em >阿里巴巴< /em >代码竞赛现全球首位AI评委 能为代码质量打分’]

这里的.*?代表的就是< h3 class=“c-title”>与>之间的内容

正则表达式基础4—自动考虑换行的修饰符re.S

re.S的做用手在使用findall()查找时,可以自动考虑换行的影响,使得.*?可以匹配换行
使用规则:

re.findall(匹配规则,原始文本,re.S)

例如,爬取网页中的链接,标题:

import re
res = '''

阿里巴巴代码竞赛现全球首位AI评委 能为代码质量打分 ''' p_href = '

.*? p_title = '

.*?>(.*?)' href = re.findall(p_href, res, re.S) title = re.findall(p_title, res, re.S) print(href) print(title) # 清除换行符号(利用的是strip()函数) for i in range(len(title)): title[i] = title[i].strip() print(title)

输出结果:

[‘https://baijiahao.baidu.com/s?id=1631161702623128831&wfr=spider&for=pc’]
[’\n < em>阿里巴巴< /em>代码竞赛现全球首位AI评委 能为代码质量打分\n ‘]
[’< em>阿里巴巴< /em>代码竞赛现全球首位AI评委 能为代码质量打分’]

正则表达式基础5—数据清洗

利用sub()函数
使用规则:

re.sub(需要替换的内容,替换值,原字符串)

如上面我们求到了 [’< em>阿里巴巴< /em>代码竞赛现全球首位AI评委 能为代码质量打分’],进行数据清洗:

import re
title = ['阿里巴巴代码竞赛现全球首位AI评委 能为代码质量打分']
title[0] = re.sub('<.*?>', '', title[0])
print(title[0])

输出结果:

阿里巴巴代码竞赛现全球首位AI评委 能为代码质量打分

特别的:
在正则表达式中 . 、* 、?、都有特殊的意义,若要替换他们,则需要加上[]
例如:

city = '*中国北京'
city1 = re.sub('[*]', '', city)
print(city1)

输出结果:

中国北京

你可能感兴趣的:(Python大数据挖掘与分析,python,正则表达式,数据挖掘)