当前位置: 首页 > news >正文

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

前言:
上篇文章使用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]

相关文章:

  • 第一层:封装
  • 第四章SpringFramework之Ioc
  • PhotoZoom Pro8全新版本功能介绍及系统要求
  • 音频基础说明
  • 目标检测——day66 Scaled-YOLOv4: Scaling Cross Stage Partial Network
  • mysql-删除方式对比-drop、truncate、delete
  • 力扣sql基础篇(十)
  • Django REST framework--Swagger API文档生成器
  • 索引(index)
  • UPerNet:Unified Perceptual Parsing for Scene Understanding论文解读
  • ​力扣解法汇总1814. 统计一个数组中好对子的数目
  • 力扣中SQL刷题
  • Spring-Boot 操作 ElasticSearch 6.x 详解
  • “图解”LeetCode 1813. 句子相似性 III
  • 我的开源项目之Matlab/Octave转Python工具(motopy)
  • 一个高效的通用光学卫星数据正射校正程序
  • 工作和学习遇到的技术问题
  • kafka常用命令大全
  • Python数据库操作 ---- pymysql教学
  • 【互联网大厂机试真题 - 科大讯飞】