Python爬虫之Scrapy框架系列(4)——项目实战【某瓣Top250电影更多信息的获取】

news2024/11/25 20:17:16

前言:
上篇文章使用Scrapy框架简单爬取并下载了某瓣Top250首页的排名前25个电影的电影名。
太寒酸了,这篇文章咱就来仔细搞一搞,搞到更加详细的信息!!!

目录:

  • 1.分析
  • 2.使用scrapy shell提取电影详细信息
    • 2.1 终端进入scrapy shell交互式界面命令:
    • 2.2 首先,确认下最开始的分析是否正确(每个电影的信息都藏在class属性值为info的div中)
    • 2.3 分析如何获取到电影名字
      • 2.3.1 首先尝试获取第一个电影名字。结合源码使用xpath匹配:
      • 2.2 一个电影名字获取成功,使用循环尝试能否成功获取到25个电影名字:
    • 2.4 分析如何获取到电影主演
    • 2.5 分析如何获取电影的评分:
      • 2.5.1 首先,尝试获取第一个电影的评分。结合源码使用xpath匹配:
      • 2.5.2 一个电影的评分获取成功,使用循环尝试能否成功获取总得25个电影的评分:
    • 2.6 总结:

1.分析

我们知道提取的数据是在spider爬虫文件里的parse函数下进行解析的!
(这个parse函数本来就是来解析和提取数据的!!!)

  • 那么,既然我们要获取更加详细的信息,我们就要来分析网页源码:(经过简单观察之后,我们发现,这25个电影各自的所有信息都分别放在了class属性值为info的div标签里,那么,我们提取出这些电影信息的话,就要首先提取到这些特定的div标签,然后再对这些个div标签进行操作即可!)

网页源码剖析:

<div class="info">
                    <div class="hd">
                        <a href="https://迫不得已打码/subject/1292052/" class="">
                            <span class="title">肖申克的救赎</span>
                                    <span class="title">&nbsp;/&nbsp;The Shawshank Redemption</span>
                                <span class="other">&nbsp;/&nbsp;月黑高飞(港)  /  刺激1995(台)</span>
                        </a>


                            <span class="playable">[可播放]</span>
                    </div>
                    <div class="bd">
                        <p class="">
                            导演: 弗兰克·德拉邦特 Frank Darabont&nbsp;&nbsp;&nbsp;主演: 蒂姆·罗宾斯 Tim Robbins /...<br>
                            1994&nbsp;/&nbsp;美国&nbsp;/&nbsp;犯罪 剧情
                        </p>

                        
                        <div class="star">
                                <span class="rating5-t"></span>
                                <span class="rating_num" property="v:average">9.7</span>
                                <span property="v:best" content="10.0"></span>
                                <span>1983356人评价</span>
                        </div>

                            <p class="quote">
                                <span class="inq">希望让人自由。</span>
                            </p>
                    </div>
</div>

2.使用scrapy shell提取电影详细信息

既然要分析如何分别匹配到各个电影的详细的信息,那么我们就考虑使用scrapy shell来十分方便快捷的进行各种尝试

2.1 终端进入scrapy shell交互式界面命令:

scrapy shell 还是上篇的start_urls

2.2 首先,确认下最开始的分析是否正确(每个电影的信息都藏在class属性值为info的div中)

在这里插入图片描述

这就说明咱的分析是没得错的!

2.3 分析如何获取到电影名字

2.3.1 首先尝试获取第一个电影名字。结合源码使用xpath匹配:

在这里插入图片描述

2.2 一个电影名字获取成功,使用循环尝试能否成功获取到25个电影名字:

在这里插入图片描述

会发现灰常的成功哦!

2.4 分析如何获取到电影主演

① 观察网页源码可知:主演所在的标签里面非常混乱,所以,先尝试匹配出25个电影的主演所在的标签:

  • 包含电影主演的标签:
    在这里插入图片描述

在这里插入图片描述也是非常的成功!!!

②第二步:我们要想办法匹配到每一个电影的主演的名字,但是!观察刚刚匹配到25个电影的包含主演的标签的text信息可知,这里面有坑哦!有些电影不一定有主演:
在这里插入图片描述
③所以,咱再匹配这25个电影的主演名字的时候,一定要注意使用判断避坑!(见下:)

            if "主" in con_star_name:
                star_name=re.findall("主演?:? ?(.*)",con_star_name)[0]
            else:
                star_name="空"

2.5 分析如何获取电影的评分:

2.5.1 首先,尝试获取第一个电影的评分。结合源码使用xpath匹配:

在这里插入图片描述
又是美好的成功哦!

2.5.2 一个电影的评分获取成功,使用循环尝试能否成功获取总得25个电影的评分:

在这里插入图片描述

非常的完美!

2.6 总结:

    def parse(self, response):  #解析和提取数据
        # 获取电影信息数据
        # films_name=response.xpath('//div[@class="info"]/div/a/span[1]/text()').extract()
        node_list=response.xpath('//div[@class="info"]')    #25个
        for node in node_list:
            # 电影名字
            film_name=node.xpath('./div/a/span[1]/text()').extract()[0]
            # 主演   拿标签内容,再正则表达式匹配
            con_star_name=node.xpath('./div/p[1]/text()').extract()[0]
            if "主" in con_star_name:
                star_name=re.findall("主演?:? ?(.*)",con_star_name)[0]
            else:
                star_name="空"
            #评分
            score=node_list.xpath('./div/div/span[@property="v:average"]/text()').extract()[0]

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

进程信号--Linux

文章目录信号&#xff1f;kill -l 指令查看所有信号信号的工作流程信号产生1.通过终端按键产生信号2.通过系统调用接口产生信号3.通过软件产生信号4.硬件异常产生信号信号接收信号处理总结信号&#xff1f; 进程间的通信我们了解到有管道通信&#xff0c;有共享内存的通信。这…

flowable编译

git clone -b flowable-release-6.7.2 https://github.com/flowable/flowable-engine.git下载之后File-Open&#xff0c;打开工程&#xff0c;modules是核心代码模块 找到flowable-root.xml按下altf12 &#xff0c;启动Terminal终端输入命令&#xff1a;mvn clean package -Ds…

《Buildozer打包实战指南》第三节 安装Buildozer打包所需的依赖文件

目录 3.1 安装依赖软件包 3.2 安装Cython 3.3 设置环境变量 3.4 安装p4a、Android SDK、NDK以及其他编译文件 Buidozer这个打包库下载安装完毕之后&#xff0c;我们还需要下载一些打包安卓apk所需要的依赖文件。 3.1 安装依赖软件包 首先输入以下命令更新Ubuntu上的软件包…

使众人行:如何带领一群人把事做成?

你好&#xff0c;我是雷蓓蓓&#xff0c;一名程序员出身的项目经理&#xff0c;曾任网易杭研项目管理部总监。 我所带领的网易杭研项目管理部&#xff0c;从2011年成立以来&#xff0c;就一直在互联网项目管理领域深耕&#xff0c;为网易云音乐、网易严选、云计算、智慧企业等…

智慧社区管理系统改造方案

伴随着城市发展的持续加速&#xff0c;许多在建智慧社区和老旧小区智能化改造都在有规划的展开着。如今许多老旧小区在展开设备升级&#xff0c;许多小区智能安防设备、物业管理服务系统软件、社区综合服务平台及其监控器设备等都会展开智能化改造。但是&#xff0c;很多人对老…

17.优于select的epoll

优于select的epoll epoll 理解及应用 select复用方法其实由来已久&#xff0c;因此&#xff0c;利用该技术后&#xff0c;无论如何优化程序性能也无法同时接入上百个客户端&#xff08;当然&#xff0c;硬件性能不同&#xff0c;差别也很大&#xff09;。这种select方式并不适…

IIC驱动中景园0.96寸OLED

驱动硬件介绍 1、驱动电压3.3到5,但是正点的也是这个芯片说用3.3 5会烧坏掉。 2、RST 上的低电平,将导致OLED 复位,在每次初始化之前,都应该复位一下 OLED 模块。而我们使用四线,里面就没有复位了 3、裸屏有多种接口方式(驱动芯片为SSD1306) 6800、8080 两种并行接口方…

Redis应用2(Redison)

不推荐使用application的配置方式,因为会替代spring内部的对于redis的配置方式 注意:如果redis数据库没有密码,不要使用 config.useSingleServer().setPassword("") 的形式,直接跳过setPassword()就可以,配置类写法如下: Configuration public class RedisConfig…

MySQL进阶——索引

一、索引及其分类 1.索引的概念 索引是一种特殊的文件&#xff0c;包含着对数据表中所有记录的引用指针通俗点说&#xff0c;索引就好比是一本书的目录&#xff0c;能加快数据库的查询速度例如需要遍历 200 条数据&#xff0c;在没有索引的情况下&#xff0c;数据库会遍历全部…

Spring之事务编程概述

目录 一&#xff1a;基本概念 搭建测试环境 基于xml声明式事务控制 二&#xff1a;事务相关配置 ​编辑 基于注解声明式事务控制 三&#xff1a;Spring事务角色 四&#xff1a;事务传播行为 五&#xff1a;案例&#xff1a;转账业务追加日志 一&#xff1a;基本概念 事…

Vue.nextTick核心原理

相信大家在写vue项目的时候&#xff0c;一定会发现一个神奇的api&#xff0c;Vue.nextTick。为什么说它神奇呢&#xff0c;那是因为在你做某些操作不生效时&#xff0c;将操作写在Vue.nextTick内&#xff0c;就神奇的生效了。那这是什么原因呢&#xff1f; 让我们一起来研究一…

手把手教你写Dockerfile以及测试

Dockerfile是什么&#xff1f; dockerfile就是用来构建docker镜像的构建文件,命令参数脚本。 如何使用Dockerfile&#xff1f; 1、编写一个Dockerfile文件2、docker build构建成 基础使用&#xff08;此处罗列一些我们经常用到的&#xff09; # 指定依赖镜像版本&#xff…

【附代码】十大主流聚类算法

准备工作安装必要的库pip install scikit-learn准备数据集使用 make _ classification ()函数创建一个测试二分类数据集。数据集将有1000个示例&#xff0c;每个类有两个输入要素和一个群集。这些群集在两个维度上是可见的&#xff0c;因此我们可以用散点图绘制数据&#xff0c…

第18章_JDBC

一、JDBC概述JDBC概述什么是JDBCJDBC&#xff08;Java DataBase Connectivity, Java数据库连接&#xff09; ,是一种用于执行SQL语句的Java API&#xff0c;为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成有了JDBC&#xff0c;程序员只需用JDBC API写一个…

夜深忽梦少年事,7年又一年,来看看95年那个小伙现在怎么样了

2022年已到尾声&#xff0c;疫情也结束了&#xff0c;这三年太不容易了&#xff0c;今年也是一样在疫情的艰难的度过&#xff0c;就是做了两件事&#xff0c;防疫和上班&#xff0c;没什么可写的。但是在一个深夜晚上&#xff0c;想了很多以前的事&#xff0c;想想还是写一点东…

亚马逊云科技Amazon DeepRacer互联网行业全国冠军诞生

1月11日&#xff0c;首届亚马逊云科技Amazon DeepRacer自动驾驶赛车互联网行业全国总决赛圆满结束&#xff0c;从全国各地选拔出的9支冠军队伍齐聚滨海三亚&#xff0c;向总决赛的桂冠发起了冲击。 本次比赛沿袭了Amazon DeepRacer League全球赛事标准&#xff0c;使用了全新的…

Vue.js的this如何取到data和method里的属性?

本篇文章介绍的是Vue.js如何取到data和methods里的属性&#xff1f; 准备工作 克隆源码到本地 git clone https://github.com/vuejs/vue.git 下载完毕后&#xff0c;用vscode打开&#xff0c;目光移动到package.json的scripts属性&#xff0c;我们看到有dev和build&#xff0…

Golang -- openwechat发送消息、自动回复

开篇 马上就要到农历新年了&#xff0c;不妨写一段代码准时为好友们送上祝福。 该 Demo 使用开源项目 openwechat &#xff0c;实现获取好友列表、为好友发送消息、图片或文件&#xff0c;接收来自好友或群组的消息并设置自动回复等功能。 openwechat Github地址 openwechat 文…

CSS设置元素内边距(padding)、外边距(margin)

设置元素内边距padding 所有的 HTML 元素基本都是以矩形为基础。 每个 HTML 元素周围的矩形空间由三个重要的属性来控制&#xff1a; padding&#xff08;内边距&#xff09; margin&#xff08;外边距&#xff09; border&#xff08;边框&#xff09; padding控制着元素内容…

产品经理需要懂的专业术语有哪些?

不同的行业都有着不同的专业术语&#xff0c;掌握专业术语不仅是个人专业能力的体现&#xff0c;还可以进一步促进工作中的交流&#xff0c;提高工作效率。 1、工作类 BRD&#xff1a;商业文档&#xff0c;包含了商业几乎&#xff0c;产品背景&#xff0c;可行性说明&#xff…