正则表达式的概念
使用单个字符串来描述一系列符合某个句法规则的字符串
是对字符串操作的一种逻辑公式
应用场景:处理文本和数据
正则表达式过程:依次拿出表达式和文本中的字符比较,如果每一个字符都能匹配,则匹配成功;否则就匹配失败。
参数:pattern:正则模型、string:要匹配的字符串
flags:匹配模式/标示位 如:是否区分大小写、多行匹配等
span() #匹配字符串的开始和结束位置的索引位置
group() #获取内容
re.match() #从头匹配一个符合规则的字符串,从起始位置开始匹配,匹配成功返回一个对象,未匹配成功返回None。
re.search() #函数会在字符串内查找模式匹配,只要找到第一个匹配然后返回,如果没有字符串匹配返回None
re.findall() #以列表的形式返回匹配的字符串
re.sub() #替换
re.split() #split能够按照所能匹配的字符串,将字符串进行切分,返回切分后的字符串列表
import re
import requests
# 循环从0到250,每次循环25
for i in range(0, 250, 25):
url = "https://movie.douban.com/top250?start=" + str(i) + "&filter="
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
'Chrome/91.0.4472.114 '
'Safari/537.36 Edg/91.0.864.54 '
}
response = requests.get(url=url, headers=headers)
# 获取页面数据
page_text = response.text
# 编写正则OBJ
# 获得name值 regular_obj = re.compile(r'<li>.*?<div class="item">.*?<span class="title">(?P<name>.*?)</span>', re.S)
# 获取年份值 .*?<p class="">.*?<br>(?P<year>.*?) 
# 获取评价人数 .*?<span>(?P<score>.*?)</span>
regular_obj = re.compile(
r'<li>.*?<div class="item">.*?<span class="title">(?P<name>.*?)</span>.*?<p class="">.*?<br>'
r'(?P<year>.*?) .*?<span>(?P<score>.*?)</span>', re.S)
obj = regular_obj.finditer(page_text)
# 因为返回的是一个迭代器对象所以遍历一下
for it in obj:
print(it.group("name"))
print(it.group("year").split())
print(it.group("score"))