300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > 【Python 爬虫系列非专业教学】(3)手把手教你获取猫眼电影 Top 100 榜单

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

时间:2023-04-20 19:40:31

相关推荐

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

开门见山

最近吧,迷上了看电影。(事先声明,我并不是拖更去看的电影,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 路线和爬虫头:/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="/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 = pile('<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()

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。