爬虫(4) --- 数据解析 -re 正则表达式

常见的三种数据解析方式:

(1)re解析;

(2)bs4解析;

(3)xpath解析;


正则表达式(Regular Expression)

在线正则表达式测试


在python中的正则表达式应用:

1.findall()

import re

# findall: 匹配字符串中所有的符合正则的内容,以列表的形式返回
lst = re.findall("\d+","我的电话号码是:10086,我母亲的电话是10010")
print(lst)

爬虫(4) --- 数据解析 -re 正则表达式_第1张图片

2.finditer()

import re

# finditer: 匹配字符串中所有的符合正则的内容,以迭代器的形式返回
lst = re.finditer(r"\d+","我的电话号码是:10086,我母亲的电话是10010")
print(lst)
# 迭代器需要以循环的方式进行输出,从迭代器中拿到内容需要.group()
for i in lst:
   print(i.group())

爬虫(4) --- 数据解析 -re 正则表达式_第2张图片

3.search()

import re

# search 返回的结果是match对象,拿数据需要.group()
# 找到一个结果就返回
s = re.search(r"\d+","我的电话号码是:10086,我母亲的电话是10010")
print(s.group())

爬虫(4) --- 数据解析 -re 正则表达式_第3张图片

 4.match()

import re

# match是从头开始匹配,不是特别常用,区别于其他全文匹配
s2 = re.match(r"\d+","10086,我母亲的电话是10010")
print(s2.group())

s = re.match(r"\d+","我的电话号码是:10086,我母亲的电话是10010")
print(s.group())

爬虫(4) --- 数据解析 -re 正则表达式_第4张图片

5.预加载正则表达式

import re

# 预加载正则表达式,可以反复的利用
obj = re.compile(r"\d+")
ret = obj.finditer("我的电话号码是:10086,我母亲的电话是10010")
for i in ret:
   print(i.group())

爬虫(4) --- 数据解析 -re 正则表达式_第5张图片

 6.从正则匹配的内容中进一步进行提取

import re
s = """
崔宇植
金多美
崔雄
国延秀
""" # (?P<分组名字>正则) 可以单独从正则匹配的内容中进一步提取内容 obj = re.compile(r"
(?P.*?)
",re.S) # re.S 让.匹配换行符 result = obj.finditer(s) for i in result: print(i.group("name"))

爬虫(4) --- 数据解析 -re 正则表达式_第6张图片


实例一

豆瓣电影排行榜(拿到豆瓣电影的名称、评分、人数、以及年份,暂未实现翻页)

# 拿到页面的源代码 requests
# 通过 re 来提取想要的有效信息 re

import requests
import re
import csv
url = "https://movie.douban.com/top250/?start=25&filter="
header = {
    "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:96.0) Gecko/20100101 Firefox/96.0"
}

resp = requests.get(url=url,headers=header)
context = resp.text

# 解析数据
obj = re.compile(r'
  • .*? (?P.*?).*?..
    (?P.*?) .*?(?P.*?).*?(?P.*?)人评价',re.S) result = obj.finditer(context) f = open("move.csv",mode="w",encoding="utf-8",newline='') csv_writer = csv.writer(f) for i in result: # print(i.group("name")) # print(i.group("year").strip()) # print(i.group("rank")) # print(i.group("num")) dic = i.groupdict() dic["year"] = dic["year"].strip() csv_writer.writerow(dic.values()) f.close() resp.close() print("over!!!")
  • 爬虫(4) --- 数据解析 -re 正则表达式_第7张图片


    实例二  获取豆瓣2022必看热片中子页面的下载地址

    # 1.定位到2022必看片
    # 2.从2020必看片中提取到子页面的链接地址
    # 3.请求子页面的连接地址,拿到我们想要的下载地址...
    import requests
    import re
    url1 = "https://dytt89.com/"
    resp1 = requests.get(url1,)
    resp1.encoding = "gbk"
    context = resp1.text
    
    result= re.compile(r"2022必看热片.*?

     该代码现存在只能打印第一个电影的下载地址的问题,可能是正则表达式或python版本的问题:

    爬虫(4) --- 数据解析 -re 正则表达式_第8张图片


    参考资料:

    1.2021年最新Python爬虫教程+实战项目案例(最新录制)_哔哩哔哩_bilibili

    你可能感兴趣的:(爬虫,正则表达式,后端)