re模块|py03

文章概览

  • 正则匹配
  • 浅爬豆瓣电影

一、正则匹配

 正则表达式就是字符串匹配的模式,常用来检查某段字符串是否含有某个、某种子串,将满足条件的子串替换或者取出来。

 正则表达式从左到右,按照优先级匹配,其中正则表达式.*?可以解决大部分匹配,是最常用的正则匹配,它截取满足条件的最小部分。

示例:提取满足正则表达式的句子。

 正则表达式的作用是从一大段文字中找到满足条件的部分。

s = """
<div class='hurry'><span id='1'>Hello</span></div>
<div class='lucky'><span id='2'>Hello2</span></div>
<div class='miki'><span id='3'>Hello3</span></div>
"""

obj = re.compile(r"<div class='.*?'><span id='\d+'>.*?</span></div>", re.S)

result = obj.finditer(s)
for it in result:
    print(it.group())

示例:提取正则匹配的字段。

 上一个例子找到一大段文字中符合要求的句子,那如何进一步提取出某个字符串呢?使用(?P正则表达式)进一步匹配。

obj = re.compile(r"<div class='.*?'><span id='\d+'>(?P<x>.*?)</span></div>", re.S)

result = obj.finditer(s)
for it in result:
    print(it.group("x"))

二、爬取豆瓣电影

 爬取要注意的点:

(1)首先需要导入两个包,requests(拿到页面源代码)、re(提取信息)、csv(保存到文件里)。

(2)为了防止反爬将UA加入请求头。(正则和基本流程正确,但爬不到东西,考虑反爬)

(3)使用正则匹配想要爬取的数据,使用.*?过滤无用信息,用(?P正则表达式)进一步匹配。

(4)分析要爬取的页面、内容。(电影名、时间、评分、评价人数)

(5)如果爬取的内容有多余空格,使用strip()清除。

image.png

import re
import requests
import csv

url = "https://movie.douban.com/chart"
headers = {
    "user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36"
}
resp = requests.get(url,headers=headers)
page_content = resp.text

obj = re.compile(r'<a class="nbg" href=.*?title="(?P<title>.*?)"'
                 r'.*?</a>.*?</a>.*?">(?P<date>.*?) / '
                 r'.*?<span class="rating_nums">(?P<score>.*?)</span>',re.S)
result = obj.finditer(page_content)
for it in result:
    print(it.group("title"))
    print(it.group("score"))
    print(it.group("date").strip())

将数据存储到文件中

 CSV,逗号分隔值文件,是一种纯文本文件(纯文本文件还有TXT,JSON等—),是数据处理中经常会用到的文本格式,可以和Excel进行转换。

 需要对上面代码做如下修改:

result = obj.finditer(page_content)
f = open("data.csv",mode="w")
csvwriter = csv.writer(f)
for it in result:
    # print(it.group("title"))
    # print(it.group("score"))
    # print(it.group("date").strip())
    dic = it.groupdict()
    dic['date'] = dic['date'].strip()
    csvwriter.writerow(dic.values())
f.close()
posted @ 2022-11-14 21:05  钱有学  阅读(23)  评论(0)    收藏  举报