【Python 爬虫系列非专业教学】(3)手把手教你获取猫眼电影 Top 100 榜单

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_41453482/article/details/102760127

开门见山

    最近吧,迷上了看电影。(事先声明,我并不是拖更去看的电影,emmm我自己都不信)

在这里插入图片描述
所以今儿我们来抓取猫眼电影 Top 100 榜单中所有的电影信息。

工具篇:

    依旧是我们的老伙伴,PyCharm 和 Google 浏览器,同时python 版本为3.6.6

新手村村长发布的任务:

    · 抓取 Top 100 榜单

在这里插入图片描述
· 输入爬取的起始页:2

    · 输入爬取的终止页:7

    · 获取 Top 100 榜单里指定范围内的全部电影的电影名称,主演信息,上映时间,并存储到 csv 文件当中

预期运行结果:

    工程目录下会出现一个 csv 文件

努力刷电影,勤勉做鸽子

教学开始:

    第一步:打开 PyCharm

    第二步,打开 猫眼电影

    第三步,泡壶茶看会电影,低俗小说 是真的好看

在这里插入图片描述
第四步,回到正题

             抓取猫眼榜单,我们要分 4步走:

                1、抓取 Top 100 榜单

                2、进行翻页操作

                3、获取所有电影的电影名称,主演信息,上映时间

                4、将上述三个信息存储到 csv 文件当中

    此次项目,依然用面向对象来完成。面向对象有些忘记的小伙伴可以看看复习一下哟

友好的基础教学环节 双 开始了,本次是正则表达式,源代码在最后哟!加油加油,我是最胖的,给自己打个气。

一、Python 中的 re 模块

    正则表达式的规则~

在这里插入图片描述
1)match()

match():尝试从字符串的开头进行正则表达式的匹配。如果匹配成功,返回结果;如果匹配失败,则返回 None.

可以说,match() 函数中放的是你所制定的规则,你要它匹配啥样的,它就乖乖匹配啥样的。当然前提是你规则对了【小声哔哔】

示例代码:
在这里插入图片描述
运行结果:
在这里插入图片描述
最好对照上面的表看哟

2).* 方法

“.” :匹配除换行符外的任意字符

“*“ :匹配出现任意次

所以组合起来,“.*”就可以代表匹配任意字符

懒癌晚期患者最喜欢的方法没有之一

示例代码:
在这里插入图片描述
运行结果:
在这里插入图片描述
3)贪婪匹配与非贪婪匹配

贪婪匹配(.*):在正则表达式匹配成功的前提下,尽可能多的匹配

非贪婪匹配(.*?):在正则表达式匹配成功的前提下,尽可能少的匹配

一个是勤快的人,另一个是我。能少干点就少干点bia~

示例代码:
在这里插入图片描述
运行结果:
在这里插入图片描述
4)search()

search():扫描整个字符串,找到符合正在表达式的第一个字符,并返回结果。

示例代码:
在这里插入图片描述
运行结果:
在这里插入图片描述
在这里提一嘴,在正则表达式中,group() 是用来提出分组截获的字符串的,group() 就是匹配正则表达式整体结果

5)findall()

findall():扫描整个字符串,返回符合正则表达式的字符串列表

示例代码:
在这里插入图片描述
运行结果:
在这里插入图片描述
6)compile()

compile():将字符串编译为正则表达式对象

示例代码:
在这里插入图片描述
运行结果:
在这里插入图片描述
二、正则表达式在网页中使用

刚刚说了那么多 re模块里的东西,这个正则表达式到底怎么在网页中使用呢。

别急,我们来举个栗子!

首先,我们打开了猫眼网页
在这里插入图片描述
在右上角的
在这里插入图片描述
这里面,找到开发者工具,快捷键是 Ctrl + Shift + I

使用后,会发现你的页面变成了这样。
在这里插入图片描述
是的,没有错!这里就是我们网站的源代码,而我们的信息也都是从这上面爬取的。
在这里插入图片描述
Question:
在这里插入图片描述
倘若我想找到这个信息的源代码,去哪里找呢?

Answer:

1)点击你源代码页面左上角的鼠标图案

在这里插入图片描述
2)选中你要查看的信息
在这里插入图片描述
3)在源代码中,有一个区域变成了蓝色,是的!它就是你苦苦找寻的代码,大明湖畔的夏雨荷
在这里插入图片描述
我们把这段代码 复制 粘贴下来,做个分析。
在这里插入图片描述
你会发现,我们所要的信息都在这里

【示例代码】
在这里插入图片描述
【运行结果】
在这里插入图片描述
三、csv 模块的使用

1)普通文本文件操作

【示例代码】

在这里插入图片描述
2)csv 文件的操作

【示例代码】

在这里插入图片描述
四、爬取猫眼电影榜单

【示例代码】
在这里插入图片描述
在这里插入图片描述
【教学分析】

1)__init__():构造函数

在这里插入图片描述
确立基本 url 路线和爬虫头:https://maoyan.com/board/4

    4 指的是 Top 100 榜

2)get_html():获取网页源代码

在这里插入图片描述
3)change_page():翻页
在这里插入图片描述
offset 用于控制页面,在爬取百度贴吧时说过
4)get_info():提取我们要的信息
在这里插入图片描述
5)save_info():保存为csv文件
在这里插入图片描述
【运行结果】
在这里插入图片描述

好了,到这里教学也就结束了。

接下来,我说几句批话。

首先,我先道个歉,各种事情纠缠拖了这么久,挺对不起各位读者的。

没多少人看,先给自己定个小目标吧。点赞过百,我周更,以民族起誓卓某人说到做到。

源代码奉上:

import urllib.request

import re

import csv

class Maoyan_movie():

def __init__(self):

    self.base_url="https://maoyan.com/board/4?"

    self.headers={"User-Agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36"}



def get_html(self,url): #获取网页源代码的函数

    req=urllib.request.Request(url,headers=self.headers)

    res=urllib.request.urlopen(req)

    html=res.read().decode("utf-8")

    self.get_info(html) #调用解析函数获取数据



def change_page(self):

    begin=int(input("请输入爬取的起始页:"))

    end=int(input("请输入爬取的终止页:"))

    for page in range(begin,end+1):

        offset=(page-1)*10 #得到控制页数的参数

        url=self.base_url+"offset="+str(offset)

        self.get_html(url) #调用上层函数获取网页源代码



def get_info(self,html): #解析网页中数据的函数

    p = re.compile('<div class="movie-item-info">.*?title="(.*?)".*?class="star">(.*?)</p>.*?class="releasetime">(.*?)</p>',re.S)

    result = re.findall(p,html)

    self.save_info(result) #调用保存数据函数



def save_info(self,result):#保存数据的函数

    for i in result:

        name=i[0].strip() #strip()可以去掉字符串两边的空白字符以及换行符

        star=i[1].strip()

        time=i[2].strip()

        content=[name,star,time] #将三条数据合并为一个列表,以便写入csv文件

        with open("movie.csv","a",encoding="utf-8",newline="") as f:

            writer=csv.writer(f)

            writer.writerow(content)

maoyan=Maoyan_movie()

maoyan.change_page()

猜你喜欢

转载自blog.csdn.net/qq_41453482/article/details/102760127