【python爬虫案例】利用python爬取豆瓣电影TOP250评分排行数据!

news/2024/11/14 12:51:45/文章来源:https://www.cnblogs.com/wangnp/p/18412433

一、爬取对象-豆瓣电影TOP250

今天给大家分享一期豆瓣读书TOP排行榜250的python爬虫案例

爬取的目标网址是:https://movie.douban.com/top250

咱们以目标为驱动,以兴趣为导向,先来看下爬虫程序运行后得到的excel文档数据

那代码是如何实现豆瓣电影TOP250数据爬取的了?下面逐一讲解一下python实现。

二、豆瓣电影网站分析

通过浏览器F12查看所有请求,发现他并没有发送ajax请求,那说明我们要的数据大概率是在html页面内容上。

于是我们 点击右键->查看网页源代码 ,发现我们需要的豆瓣电影评分的排行榜数据都在html页面里

这就简单了,我们直接往下看,上代码。

三、python爬虫代码详解

首先,导入我们需要用到的库

import requests     # 发请求
from lxml import etree  # 解析html
import pandas as pd  # 存取csv
from urllib.parse import urljoin    # url处理

然后,向豆瓣电影TOP250的网页发起请求,获得html页面内容

page_source = requests.get(page_url, headers=headers).text

用lxml库解析html页面

tree = etree.HTML(page_source)

使用xpath来提取我们需要的排行榜数据内容

# 获得数据所在的标签
lis = tree.xpath("//ol[@class='grid_view']/li")# 循环标签获得电影信息
for li in lis:url = extract_first(li.xpath(".//div[@class='hd']/a/@href")).strip()    # 链接movie_name = "".join(li.xpath(".//div[@class='hd']/a//text()"))  # 电影名字movie_name = re.sub("\s+", "", movie_name)score = extract_first(li.xpath(".//span[@class='rating_num']/text()")).strip()  # 评分star_people_num = extract_first(li.xpath(".//div[@class='star']/span[4]/text()")).strip()   # 评价人数star_people_num = re.search("\d+", star_people_num).group()one_evaluate = extract_first(li.xpath(".//p[@class='quote']/span/text()")).strip()  # 一句话评价info = "".join(li.xpath(".//div[@class='bd']/p/text()")).strip()   # 电影信息:导演、主演、年份、国家、类型infos = info.split("\n")director = infos[0].split("\xa0\xa0\xa0")[0]  # 导演actor = Nonetry:actor = infos[0].split("\xa0\xa0\xa0")[1]   # 主演except:# 只有导演,没有主演的(比如 第3页 窃听风暴)pass

其中,需要特殊说明的是,第3页《窃听风暴》这部电影和其他电影页面排版不同:

这部电影只有导演,却没有主演信息,所以会有个异常处理的代码

try:actor = infos[0].split("\xa0\xa0\xa0")[1]   # 主演
except:# 只有导演,没有主演的(比如 第3页 窃听风暴)pass

还有就是有些电影,他的年份、国家、类型的格式有细微的不同之处,所以也需要特殊处理一下。

info_sub = re.sub("\s+", "", infos[1])
info_subs = info_sub.split("/")
if len(info_subs) == 3:year = info_subs[0]     # 年份country = info_subs[1]      # 国家type = info_subs[2]     # 类型
elif len(info_subs) == 4:year = str(info_subs[0]) + "/" + str(info_subs[1])  # 年份country = info_subs[2]  # 国家type = info_subs[3]  # 类型
else:print(f"!!!!未匹配上规则!!!! 电影名称={movie_name}", infos)

最后,我们将爬虫爬取的数据保存到csv文档里

def save_to_csv(csv_name):"""数据保存到csv@param csv_name: csv文件名字@return:"""df = pd.DataFrame()  # 初始化一个DataFrame对象df['电影名字'] = movie_namesdf['电影链接'] = urlsdf['评分'] = scoresdf['评分人数'] = star_people_numsdf['导演'] = directorsdf['主演'] = actorsdf['年份'] = yearsdf['国家'] = countrysdf['类型'] = typesdf['一句话评价'] = one_evaluatesdf.to_csv(csv_name, encoding='utf8', index=False)  # 将数据保存到csv文件print("保存文件成功", csv_name)

上面的movie_names、urls等变量都是使用的list来进行存储的,这样才能符合pandas导出数据时的需要,最后调用to_csv()方法即可导出豆瓣电影的排行榜数据到文档里了。

三、python爬虫源代码获取

我是 @王哪跑,持续分享python干货,各类副业软件!
附完整python源码及数据:【python爬虫案例】利用python爬虫爬取豆瓣电影评分TOP250排行数据!


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/799190.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ros2 - Moveit2 - DeepGrasp(深度抓握)

MoveIt 深度把握 本教程演示了如何在 MoveIt 任务构造器中使用抓握姿势检测 (GPD)和 Dex-Net 。 GPD(左)和 Dex-Net(右)用于生成拾取圆柱体的抓取姿势。 https://moveit.picknik.ai/main/_images/mtc_gpd_panda.gif 入门 如果您还没有这样做,请确保您已经完成入门指南中…

(装)K8s 总体架构及目录结构

原文:https://www.guoshaohe.com/cloud-computing/kubernetes-source-read/12491. kubernetes 总体架构目前想对kubernetes 1.21 的源码进行一次阅读分析,本篇文章是对k8s的整体架构进行一个大致分析,先要搞清楚每个组件的功能和任务,在根据不同的组件进行深度的源码分析。…

[C++ Daily] calloc 与 malloc

转载 C++ 面试突破 - LeetBook - 力扣(LeetCode)全球极客挚爱的技术成长平台 Kind BorglQI的评论

贼好用!五分钟搭建一个美观且易用的导航页面!

Pintree 是一个开源项目,旨在将浏览器书签导出成导航网站。通过简单的几步操作,就可以将书签转换成一个美观且易用的导航页面。大家好,我是 Java陈序员。 今天,给大家介绍一个贼好用的导航网站搭建工具,只需通过几步操作,就能搭建出个性化导航网站!关注微信公众号:【Ja…

26.删除有序数组中的重复项 Golang实现

题目描述:给你一个 非严格递增排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。 考虑 nums 的唯一元素的数量为 k ,你需要做以下事情确保你的题解可以…

Hadoop(十一)HDFS 读写数据流程

HDFS读写数据流程 一、写数据流程1、客户端通过Distributed FileSystem模块向NameNode请求上传文件,NameNode检查目标文件是否已存在,父目录是否存在 2、NameNode返回是否可以上传 3、客户端请求第一个Block上传到哪几个DataNode服务器上 4、NameNode返回3个DataNode节点,分…

产品经理的日常工作

杜工库 声明 欢迎转载,但请保留文章原始出处:) 博客园:https://www.cnblogs.com/chenxiaomeng/ 如出现转载未声明 将追究法律责任~谢谢合作

Hadoop(十一)HDFS 写数据流程

HDFS写数据流程 一、写数据流程1、客户端通过Distributed FileSystem模块向NameNode请求上传文件,NameNode检查目标文件是否已存在,父目录是否存在 2、NameNode返回是否可以上传 3、客户端请求第一个Block上传到哪几个DataNode服务器上 4、NameNode返回3个DataNode节点,分别…

windows定时执行python程序

先写个 bat 脚本,执行 Python 程序 :: 根据实际情况修改 Python 解释器的路径 set PYTHON=D:\python\python.exe set CODE_DIR=D:\code\projectcd /d "%CODE_DIR%" :: 启动 Python 程序 echo Running main.py... %PYTHON% main.py > nohup.log 2>&1echo A…

Prometheus修改数据存储位置

Prometheus修改数据存储位置 Prometheus的数据存储位置可以通过配置文件中的 --storage.tsdb.path 参数来指定。默认情况下,数据存储在Prometheus安装目录下的 data 文件夹中。要修改数据存储位置,可以在Prometheus启动命令中添加或修改该参数。 步骤 1:修改 Prometheus 启动…

AIoTengine智能物联引擎

新一代数智基础设施,依托AIoT2.0技术,实现感知、认知、决策和执行的一体化融合,打造云边协同的分布式智能物联引擎,驱动行业数智化革新。

WPF打包独立运行的程序

方案一:使用Costura.Fody插件将自己写的程序打包成一个可以独立运行的EXE文件 第1步:安装Costura.Fody 首先用Visual Studio 2017打开你的解决方案,依次找到“工具”---“NuGet包管理” - “管理解决方案的NuGet程序包”,到了这一步会打开NuGet-解决方案页面,在浏览选项下面…