Python爬虫之Scrapy框架系列(7)——XXTop250电影简介信息的获取及存储到本地

news2024/11/15 7:42:36

前面简单爬取了某Top250电影的一些信息。本文,来尝试搞到每个电影的简介信息。

目录:

  • 1. 获取电影简介信息
    • 1.1 第一步:配对每个电影对应的简介信息:
      • First:包含电影简介信息url的获取
      • Second:爬虫文件的更改
      • Third:编写get_detail()函数
      • 注意:特例的处理
    • 1.2 第二步:把每个电影的简介信息存储到对应的电影信息里:
      • ①按习惯性的思路:步骤如下
      • ②习惯性思维不行,Scrapy框架设计者肯定也考虑到这种问题了—引入meta参数解决,如下:
    • 1.3 会发现可以很完美的搞到我们所想要的数据:

1. 获取电影简介信息

1.1 第一步:配对每个电影对应的简介信息:

First:包含电影简介信息url的获取

  • 观察网页可知,我们要想获取到每个电影的简介信息。首先要获取到每个电影的包含它简介信息的url。
    在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

Second:爬虫文件的更改

  • 在爬虫文件中加入此成功的代码,并且,我们所获取到的是request请求,而Scrapy框架里一切请求都要交给引擎,所以我们要将此request请求yield返回给引擎,让引擎进行一系列处理。最后,引擎处理完之后,要将处理过后的数据再交给爬虫文件进行数据解析及获取,而这就需要我们在爬虫文件中定义一个专门解析与获取电影简介信息的函数(注意:这个函数一定要包含response参数用于接收引擎交给爬虫文件的数据)
#将下面代码加到爬虫文件中parse函数的循环的最下面:
                detail_url=node.xpath('./div/a/@href').extract()[0]
                yield scrapy.Request(detail_url,callback=self.get_detail)
#将下面函数加入爬虫文件:
    def get_detail(self,response):
        pass

Third:编写get_detail()函数

  • 现在,我们就要使用我们自定义的函数get_detail()处理引擎处理过后交给我们的response了。这给咱的是个response,咱继续分析这个response的网页源码,使用xpath匹配到我们所需的电影的简介信息即可!在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述

将此代码加入到我们写的get_detail()函数里即可:

    def get_detail(self,response):
        #获取电影简介信息
        description=response.xpath('//div[@id="link-report-intra"]/span/span[@property="v:summary"]/text()').extract()[0].strip()

注意:特例的处理

  • 在测试的时候,发现有个电影的简介信息是个特例,它放的标签结构与众不同,所以咱改下爬虫文件中的get_detail()函数:
    def get_detail(self,response):
        #获取电影简介信息
        description=response.xpath('//div[@id="link-report-intra"]//span[@property="v:summary"]/text()').extract()[0].strip()

在这里插入图片描述

1.2 第二步:把每个电影的简介信息存储到对应的电影信息里:

①按习惯性的思路:步骤如下

(1)首先:在items.py文件中创建一个用于存储电影简介信息的字段

    description=scrapy.Field()

(2)settings.py文件中开启管道;并设置延时
(3)在爬虫文件中将电影简介信息对应到字段里,并将其返回给管道pipelines.py文件。

    def get_detail(self,response):
        #获取电影简介信息
        item=DoubanItem()
        description=response.xpath('//div[@id="link-report-intra"]//span[@property="v:summary"]/text()').extract()[0].strip()
        item['description']=description
        yield item

设置爬取首页25个电影的信息,运行爬虫之后,观察所获取到的数据:
在这里插入图片描述会发现,电影信息和其简介信息非但没有放在一起,而且更严重的是,由于scrapy框架采取的是异步方式,所以底下得到的这25个电影的简介信息也是毫无顺序的。这就很头疼了!

②习惯性思维不行,Scrapy框架设计者肯定也考虑到这种问题了—引入meta参数解决,如下:

注意:这个参数贼牛。那咱如何来理解这个参数的作用:

  1. 在爬虫文件将包含电影简介信息的url请求发送给引擎的同时,会把meta里的参数也携带着;
  2. 在引擎处理完这个url请求之后会将处理后的response返回给爬虫文件中我们指定的callback=self.get_detail函数里的response参数,并且同时会携带着这个meta参数。
    牛皮之处可见一斑,这不就是变相的将电影基本信息数据和电影简介信息给拼接到了一起了!!!
#修改爬虫文件里的parse函数中对应的代码:
                yield scrapy.Request(detail_url,callback=self.get_detail,meta={"info":item})
                

修改爬虫文件中的解析电影简介信息的函数get_detail()

    def get_detail(self,response):
        item=DoubanItem()
        #获取电影简介信息
        #1.meta会跟随response一块返回  2.可以通过response.meta接收   3.通过updata可以添加到新的item对象
        info = response.meta["info"]        #接收电影的基本信息
        item.update(info)                   #把电影基本信息的字段加进去
        
        #将电影简介信息加入相应的字段里
        description=response.xpath('//div[@id="link-report-intra"]//span[@property="v:summary"]/text()').extract()[0].strip()
        item['description']=description
        yield item

1.3 会发现可以很完美的搞到我们所想要的数据:

在这里插入图片描述

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

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

相关文章

Java和Scala中关键字package指定的是源文件的存放路径吗?

无为也,则用天下而有余;有为也,则为天下用而不足🔬 目录 Scala代码演示 Java代码演示 总结 写在前面: 包(package)不是约定源文件存放的位置,而是约定源文件编译后生成的字节码…

数据挖掘,计算机网络、操作系统刷题笔记37

数据挖掘,计算机网络、操作系统刷题笔记37 2022找工作是学历、能力和运气的超强结合体,遇到寒冬,大厂不招人,可能很多算法学生都得去找开发,测开 测开的话,你就得学数据库,sql,orac…

Scanpy 单细胞测序基因分析

参考:https://www.bilibili.com/video/BV1sq4y1C7Qx/ https://scanpy-tutorials.readthedocs.io/en/latest/pbmc3k.html 代码下载:scanpy分析scRNA-seq数据基本流程(含scanpy seurat两大工具对比) 链接: https://pan.baidu.com/s…

SCSS函数——Map

SCSS函数——MapSCSS函数——MapMap的简单声明Map取值遍历Map获取值实现换肤效果1. 设置用户可以选择的主题2.创建主题需要颜色的Map集合3.在使用SCSS文件中导入函数和Scss文件4.构建一个themeCombine函数动态创建类名5.使用each对变量进行遍历Map函数1.get()取值函数2.deep-re…

STM32F10x数据手册之GPIO手册记录

前言 1、本文根据数据手册进行记录 2、由于手册的逻辑结构是呈现为总体到具体的结构,导致查看的时候不方便,所以在此记录,方便回顾 GPIO–输入模式 对比分析: 1、在此模式下,向GPIO口,输出高低电平是无效的。 2、GPIO初始电平与…

PHP反序列化新手入门学习总结

最近写了点反序列化的题,才疏学浅,希望对CTF新手有所帮助,有啥错误还请大师傅们批评指正。 php反序列化简单理解 首先我们需要理解什么是序列化,什么是反序列化? PHP序列化:serialize() 序列化是将变量…

DW 2023年1月Free Excel 第八次打卡 Excel数据可视化

第八章Excel数据可视化 数据下载地址与参考链接:https://d9ty988ekq.feishu.cn/docx/Wdqld1mVroyTJmxicTTcrfXYnDd 1 条形图 案例1 打开data/chap8/8.1xlsx中的【案例1】,现在有湖北区2022/01/01的不同商品的销售额。 问题1:如何更加直观…

Java基础11:正则表达式

Java基础11:正则表达式一、匹配规则1. 字符类(只匹配一个字符)2. 预定义字符(只匹配一个字符)3. 数量词二、Pattern三、Matcher四、在字符串方法中的使用1. matches2. replaceAll3. split五、 PatternMatcher示例1. 爬…

【自然语言处理】主题建模:基于 LDA 实现

主题建模:基于 LDA 实现主题建模是一种常见的自然语言处理任务。隐含的狄利克雷分布(Latent Dirichlet Allocation,LDA)是其中一种实现算法,其核心思想如下图所示。 主题建模的方法也比较多,除了本文提到的…

MySQL架构概述

MySQL架构 对MySQL服务端架构的概述,包括逻辑架构、并发控制、事务和MVCC(多版本并发控制)等内容。 逻辑架构 连接/线程管理 最上层负责与客户端交互,包括连接处理、身份验证、确保安全性等。 解析器、优化器 MySQL核心能力都在…

机器学习从入门到进阶所需学习资料-包括书、视频、源码

本文整理了一些入门到进阶机器学习所需要的一些免费的精品视频课程,一些优质的书籍和经典的代码实战项目。本文整理自网络,源地址:https://github.com/linxid/Machine_Learning_Study_Path视频1.1 吴恩达老师机器学习课程:•Cours…

【【黑马SpringCloud(2)】微服务调用

服务调用和网关Feign远程调用Feign自定义配置Feign性能优化使用连接池代替默认的URLConnection解决重复代码继承方式抽取方式Gateway服务网关gateway快速入门断言过滤器全局过滤器过滤器执行顺序:跨域问题Feign远程调用 RestTemplate发起远程调用的代码&#xff1a…

走进 CSS

看完本篇博客,你能收获: 👉 了解 CSS 是什么?👉 学会 CSS 怎么用?👉 CSS的选择器👉 如何用 CSS 美化网页 文章目录01 CSS 是什么?02 CSS的发展史03 CSS 快速入门04 CSS的…

唯一索引范围查询锁 bug修复了

唯一索引范围查询锁 bug修复了 其他资料介绍入下: session A 是一个范围查询,按照原则 1 的话,应该是索引 id 上只加 (10,15] 这个 next-key lock ,并且因 为 id 是唯一键,所以循环判断到 id15 这一行就应该停止了。…

生成标题的节点

生成标题的节点目录概述需求:设计思路实现思路分析1.mine 的概述2 mi是否自动计算未来的处理人参考资料和推荐阅读Survive by day and develop by night. talk for import biz , show your perfect code,full busy,skip hardness,make a better result,w…

智能驾驶 车牌检测和识别(一)《CCPD车牌数据集》

智能驾驶 车牌检测和识别(一)《CCPD车牌数据集》 目录 智能驾驶 车牌检测和识别(一)《CCPD车牌数据集》 1. 前言 2.车牌号码说明 3.车牌数据集CCPD (1)车牌数据集CCPD说明 (2&#xff09…

Eclipse调试python

Eclipse调试pythonF5:Step Into 单步调试,跳入函数内部F6:Step Over 单步调试,不跳入函数内部,执行当前代码F7:Step Return 返回到当前函数的尾部,跳转到调用函数的位置F8:Resume 跳…

DDOS渗透与攻防(二)之SYN-Flood攻击

系列文章 DDOS渗透与攻防(一)之拒绝服务攻击概念介绍 SYN-Flood攻击 1.SYN-Flood拒绝服务攻击 (1).攻击协议原理介绍说明_Syn-Flood SYN Flood (SYN洪水) 是种典型的DoS (Denial of Service,拒绝服务) 攻击。效果就是服务器TCP连接资源耗尽,停止响应…

8 种异步实现方式,性能炸裂!

异步执行对于开发者来说并不陌生,在实际的开发过程中,很多场景多会使用到异步,相比同步执行,异步可以大大缩短请求链路耗时时间,比如:发送短信、邮件、异步更新等,这些都是典型的可以通过异步实…

LeetCode动态规划经典题目(九):0-1背包问题

学习目标: 0-1背包问题 学习内容: 9. LeetCode416. 分割等和子集https://leetcode.cn/problems/partition-equal-subset-sum/ 10. LeetCode1049. 最后一块石头的重量 IIhttps://leetcode.cn/problems/last-stone-weight-ii/ 学习产出: 独…