python爬虫基础案例——爬取猫眼电影并保存数据到excel

article/2025/11/10 20:50:37

好久没更新博文了,最近忙于学习scrapy框架和微信小程序开发,今天看到一个自己之前写的但是中途放弃的爬虫小案例——爬取猫眼电影TOP100榜的相关数据,现在将它写好并分享给大家。

爬虫的套路就是通过url发送请求,获取数据,在解析数据,最后保存数据。

一、模块

根据套路,选择好要使用的模块/库,这里用的模块/库是

import requests
from lxml import etree
import pandas as pd

二、正文

1.比较url,比较url变化规律,从而得到base_url

 如图,根据不同的页面发现url的规律是offset的变化。因此可以得到base_url就是

https://maoyan.com/board/4?offset={},待会通过format函数构建完整的url。

2.获取headers

 在该页面1右键检查,2点击network,3点击左上角刷新按钮,4点击图中的网址,在右边找到user-Agent,referer和cookie并组成字典形式

注:该网址可能只需要这三个中的其中一两个,可自行删除尝试是否可行。

headers = {'Referer': 'https://maoyan.com/board/4?requestCode=e83854272b2bff27fb25137346aeb714bbj90&offset=10','Cookie': '__mta=247404475.1629885283786.1629887482215.1629893884124.8; uuid_n_v=v1; uuid=7868E9D0058A11ECAEE0416AA74DE6B1A0A2AC49E1604153A8082BAC6B403331; _csrf=0032460ef4cb4cbc03a01838a3100aeb3daef130e0ac4b0cd03e52ab9ff596fb; Hm_lvt_703e94591e87be68cc8da0da7cbd0be2=1628220737,1628236529,1628653354,1629885284; _lxsdk_cuid=17a469fab1dc8-04e619bda8b373-3f356b-144000-17a469fab1dc8; _lxsdk=7868E9D0058A11ECAEE0416AA74DE6B1A0A2AC49E1604153A8082BAC6B403331; Hm_lpvt_703e94591e87be68cc8da0da7cbd0be2=1629893884; _lxsdk_s=17b7d3ef5ea-f43-47d-9b1%7C%7C3','User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36'}

3.构建url,发送请求

在这里由base_url构建最终的url不止一个,所有要用到for循环,每构建一个url,就执行一次发送请求、获取数据、解析数据、保存数据。

for i in range(10):url = base_url.format(str(i * 10))response = requests.get(url, headers=headers)# print(response.text)

4.解析数据

这里使用的是lxml库来解析和提取HTML中的数据。

在for循环中(部分代码接上,以便更加顺畅,易懂)

    response = requests.get(url, headers=headers)# print(response.text)html = response.textxp = etree.HTML(html)

接下来就需要用到xpath语法了,当然也可以在浏览器中直接copy xpath。

解析出网页后,我们需要获取每个电影的节点列表

 从中可以发现该页面的所有电影信息都在<div class="main">...</div>中。

lis = xp.xpath('//*[@id="app"]/div/div/div[1]')

这样我们就得到了电影节点列表。

接下来在电影列表中遍历每一部电影,在从每一部电影中遍历排名,片名,主演,上映时间,评分。因此需要两个for循环,

    for li in lis:for n in range(0, 10):paiming = li.xpath('//*[@id="app"]/div/div/div[1]/dl/dd/i/text()')[n]pianming = li.xpath('//*[@id="app"]/div/div/div[1]/dl/dd/div/div/div[1]/p[1]/a/text()')[n]zhuyan = li.xpath('//*[@id="app"]/div/div/div[1]/dl/dd/div/div/div[1]/p[2]/text()')[n].strip().replace("主演:", "")shijian = li.xpath('//*[@id="app"]/div/div/div[1]/dl/dd/div/div/div[1]/p[3]/text()')[n].replace("上映时间:", "")

这段代码需重点关注,1要获取文本内容,则需要在xpath语法最后加/text(),2如下

 可以将xpath在浏览器中试试看,例://*[@id="app"]/div/div/div[1]/dl/dd[1]/div/div/div[1]/p[1]/a的结果为 我不是药神,分析节点,若删除dd后的[1],最终结果就是该页面所有片名,

改变dd[]中的值,结果也不同,所有我们只需要dd就行,每个xpath后面的[n]表示获取第n个数据。3由于主演和上映时间爬出来的数据中有“主演:”和“上映时间:”,具有重复性,并且影响美观。因此用replace()函数将其替换为空(删除)。

 如图,由于评分被拆开了,所有要进行拼接,拼接出来的为str类型,你也可以将它转变一下类型。

            # 由于分数被拆成了两个i节点,所有要分别获取并进行拼接score1 = li.xpath('//*[@id="app"]/div/div/div[1]/dl/dd/div/div/div[2]/p/i[1]/text()')[n]score2 = li.xpath('//*[@id="app"]/div/div/div[1]/dl/dd/div/div/div[2]/p/i[2]/text()')[n]score = score1 + score2

5.保存数据到excel

df = []
columns = ['排名', '片名', '主演', '上映时间', '评分']
b = df.append([paiming, pianming, zhuyan, shijian, score])
# dataframe是二维数组,columns将上面的标题行插入到二维数组中
d = pd.DataFrame(df, columns=columns)
# index=False表示输出不显示索引值
d.to_excel("猫眼电影.xlsx", index=False)

 这其实是一个模板,首先定义一个空的列表,然后将解析的数据以列表形式添加,接着dataframe表示二维数组,将这些数据以二维数组形式保存。

三、所有代码及结果展示

import requests
from lxml import etree
import pandas as pd
df = []
# 注:猫眼电影有时要滑块验证,所以print打印出来为猫眼验证中心,要先登录网址通过滑块验证
base_url = 'https://maoyan.com/board/4?offset={}'
headers = {'Referer': 'https://maoyan.com/board/4?requestCode=e83854272b2bff27fb25137346aeb714bbj90&offset=10','Cookie': '__mta=247404475.1629885283786.1629887482215.1629893884124.8; uuid_n_v=v1; uuid=7868E9D0058A11ECAEE0416AA74DE6B1A0A2AC49E1604153A8082BAC6B403331; _csrf=0032460ef4cb4cbc03a01838a3100aeb3daef130e0ac4b0cd03e52ab9ff596fb; Hm_lvt_703e94591e87be68cc8da0da7cbd0be2=1628220737,1628236529,1628653354,1629885284; _lxsdk_cuid=17a469fab1dc8-04e619bda8b373-3f356b-144000-17a469fab1dc8; _lxsdk=7868E9D0058A11ECAEE0416AA74DE6B1A0A2AC49E1604153A8082BAC6B403331; Hm_lpvt_703e94591e87be68cc8da0da7cbd0be2=1629893884; _lxsdk_s=17b7d3ef5ea-f43-47d-9b1%7C%7C3','User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36'}
columns = ['排名', '片名', '主演', '上映时间', '评分']
for i in range(10):url = base_url.format(str(i * 10))response = requests.get(url, headers=headers)print(response.text)html = response.textxp = etree.HTML(html)# print(xp)lis = xp.xpath('//*[@id="app"]/div/div/div[1]')# print(lis)for li in lis:for n in range(0, 10):paiming = li.xpath('//*[@id="app"]/div/div/div[1]/dl/dd/i/text()')[n]pianming = li.xpath('//*[@id="app"]/div/div/div[1]/dl/dd/div/div/div[1]/p[1]/a/text()')[n]zhuyan = li.xpath('//*[@id="app"]/div/div/div[1]/dl/dd/div/div/div[1]/p[2]/text()')[n].strip().replace("主演:", "")shijian = li.xpath('//*[@id="app"]/div/div/div[1]/dl/dd/div/div/div[1]/p[3]/text()')[n].replace("上映时间:", "")# 由于评分被拆成了两个i节点,所有要分别获取并进行拼接score1 = li.xpath('//*[@id="app"]/div/div/div[1]/dl/dd/div/div/div[2]/p/i[1]/text()')[n]score2 = li.xpath('//*[@id="app"]/div/div/div[1]/dl/dd/div/div/div[2]/p/i[2]/text()')[n]score = score1 + score2b = df.append([paiming, pianming, zhuyan, shijian, score])# dataframe是二维数组,columns将上面的标题行插入到二维数组中d = pd.DataFrame(df, columns=columns)# index=False表示输出不显示索引值d.to_excel("猫眼电影.xlsx", index=False)

四、总结

这个爬虫案例是今天刚发现之前还没完成的,所有就将它完成了,难点应该就在xpath那块。

这也给我们一个启发:当时做不出的案例可以先放一放,到后面再会过去写完程序,但是要记得不要忘记之前没写出来的案例!!


http://chatgpt.dhexx.cn/article/ndVXbq9i.shtml

相关文章

采集电影票房实时数据

网址&#xff1a;aHR0cDovL3BmLmZlLnN0Lm1hb3lhbi5jb20vZGFzaGJvYXJk 抓包分析 根据数据包可以发现&#xff0c;该网站在发送了ajax请求的同时又请求了一份woff文件&#xff0c;基本上可以确定这里使用了字体文件加密的方式了。 分析请求参数 不难看出&#xff0c;只有timestam…

【Python爬虫】猫眼电影榜单Top100

这是一个入门级的Python爬虫&#xff0c;结构易于理解。本文对编写此爬虫的全过程进行了讲述。希望对大家的Python爬虫学习有所帮助。 一、目标 爬取猫眼电影榜单Top100&#xff0c;将数据存入Excel文件中&#xff0c;并利用pyecharts库进行数据可视化得到.html文件和.png文件…

python爬虫阶段性总结和项目实操——爬取猫眼票房Top100

本博客通过爬取猫眼票房Top100来简要复习一下网页的HTML获取&#xff08;requests库&#xff09;解析&#xff08;Beautiful Soup库&#xff09;和数据保存&#xff08;csv库&#xff09;以及总结一下爬取过程中遇到的问题和解决方法 运行结果如下 1.获取网页源代码 def get_…

猫眼产品分析

一、前言 本文试图通过对猫眼电影的版本迭代历程分析、用户分析、功能分析、运营分析以及数据表现来回答以下几个问题&#xff1a; &#xff08;1&#xff09;猫眼电影的产品定位&#xff1f; &#xff08;2&#xff09;猫眼电影产品设计及运营中有哪些亮点和策略&#xff1f…

详解用爬虫批量抓取猫眼电影票房数据

"大数据"是一个体量特别大&#xff0c;数据类别特别大的数据集&#xff0c;并且这样的数据集无法用传统数据库工具对其内容进行抓取、管理和处理。 "大数据"首先是指数据体量(volumes)大&#xff0c;指代大型数据集&#xff0c;一般在10TB规模左右&#xf…

基于Python的电影票房爬取与可视化系统的设计与实现

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

猫眼 — 破解数字反爬获取实时票房

From&#xff1a;https://zhuanlan.zhihu.com/p/33112359 js分析 猫_眼_电_影 字体文件 font-face&#xff1a;https://www.cnblogs.com/my8100/p/js_maoyandianying.html 解析某电影和某招聘网站的web-font自定义字体&#xff1a;https://www.jianshu.com/p/5400bbc8b634 Font…

猫眼电影票房爬取到MySQL中_爬取猫眼电影top100,request、beautifulsoup运用

这是第三篇爬虫实战&#xff0c;运用request请求&#xff0c;beautifulsoup解析&#xff0c;mysql储存。 如果你正在学习爬虫&#xff0c;本文是比较好的选择&#xff0c;建议在学习的时候打开猫眼电影top100进行标签的选择&#xff0c;具体分析步骤就省略啦&#xff0c;具体的…

python 抢票代码 猫眼演出_Python爬虫-猫眼电影排行

爬虫的目标 爬取猫眼电影TOP100的电影名称,时间,评分,图片等信息 抓取分析 查看网页源代码,找到对应的目标信息,发现一部电影对应的源代码是一个dd节点 抓取首页 为了方便,这里先抓取第一页的内容,运行之后,可以查看到网页的源代码,之后需要对页面进行解析。 import re…

flask+猫眼电影票房预测和电影推荐

flask猫眼电影票房预测和电影推荐&#xff0c;此系统有详细的录屏&#xff0c;下面只是部分截图&#xff0c;需要看完整录屏联系博主 系统开发语言python&#xff0c;框架为flask&#xff0c;数据库mysql&#xff0c;分为爬虫和可视化分析

猫眼电影产品分析

一、前言 本文试图通过对猫眼电影的版本迭代历程分析、用户分析、功能分析、运营分析以及数据表现来回答以下几个问题&#xff1a; &#xff08;1&#xff09;猫眼电影的产品定位&#xff1f; &#xff08;2&#xff09;猫眼电影产品设计及运营中有哪些亮点和策略&#xff1f; …

超过53亿!《长津湖》为什么这么火爆?我用 Python 来分析猫眼影评

对于这个十一黄金周的电影市场&#xff0c;绝对是《长津湖》的天下&#xff0c;目前票房就已经突破53亿&#xff0c;大有奋起直追《战狼2》的尽头。而且口碑也是相当的高&#xff0c;猫眼评分高达9.5&#xff0c;绝对的票房口碑双丰收啊 下面我们就通过爬取猫眼的电影评论&am…

python使用pyecharts对猫眼电影票房精美可视化分析简单仪表盘??(五个图好多个组件!!)

本次带来的是象形柱状图&#xff0c;玫瑰饼图&#xff0c;柱状图&#xff0c;折线图&#xff0c;漏斗图&#xff0c;并在一个网页上显示。排版也不好&#xff0c;其实我就是翻译下文档给大家讲解一下&#xff01; 我又来了&#xff01;上次做了个猫眼电影的不过瘾&#xff0c;又…

python爬猫眼电影影评,Python系列爬虫之爬取并简单分析猫眼电影影评

前言 今天给大家介绍利用Python爬取并简单分析猫眼电影影评。让我们愉快地开始吧~ 开发工具 Python版本&#xff1a;3.6.4 相关模块&#xff1a; requests模块&#xff1b; pyecharts模块&#xff1b; jieba模块&#xff1b; scipy模块&#xff1b; wordcloud模块&#xff1b; …

爬取猫眼电影,进行分析

目录 简介环境要求数据爬取爬取目标电影详情页反爬虫破解数据存储服务器搭建电影推荐 数据展示电影推荐电影评分电影票房电影类型词云 简介 这次是一次数据库实验&#xff0c;实验要求是了解最新的数据库&#xff0c;并使用&#xff01;做一个简单案例使用。根据实际需要就采用…

Python—猫眼电影票房爬虫实战 轻松弄懂字体反爬!

目标 1.爬取猫眼票房信息 2.将信息保存起来(MySQL、Redis、MongoDB或者Excel等等)&#xff0c;我们保存的是Excel 爬取网址 https://piaofang.maoyan.com/?vernormal&isid_key2d9aacd2f26d4d0dba63 分析 1.打开chrome&#xff0c;输入网址我们看到的效果如下 2.我们…

基于Python猫眼票房TOP100电影数据抓取

基于Python猫眼票房TOP100电影数据抓取 使用requests库抓取数据BeatifulSoup解析URL&#xff0c;将数据存入csv文件处理数据&#xff0c;生成图表 本次爬取数据使用Python语言在jupyter notebook上爬取的&#xff0c;并使用数据生成了一些图表。 使用requests库抓取数据 本段…

基于猫眼票房数据的可视化分析

案例背景&#xff1a;由于最近《哪吒之魔童降世》的火爆&#xff0c;最新票房已经超过49亿&#xff0c;使我对国内票房的整体走势有了很大兴趣&#xff0c;究竟49亿的票房数据&#xff0c;在国内是处于一个什么水平&#xff1f;除了票房数据&#xff0c;又有哪些特征因素可以用…

ardruino控制继电器_Arduino 各种模块篇-继电器

现在按照既定想法&#xff0c;把所有的arduino模块依次尝试一边。 链接到我的arduino Uno 与arduino mega 2560 上 mega 2560有更多的io口&#xff0c;而且cache也很大。所以应该更有效果。幸好可以有arduino IDE 现在比较稳定的版本官方提供的是1.0.3的。 而我用的是ubuntu库里…

【继电器模块教程基于Arduino】

继电器模块教程基于Arduino 前言介绍继电器模块继电器引出线示例:使用继电器模块和 PIR 运动传感器控制灯![在这里插入图片描述](https://img-blog.csdnimg.cn/760e865a1e6b49d4a8f3e9fe1a0a6f74.png)前言 本文介绍如何使用继电器模块通过 Arduino 控制电源电压。我们对继电器…