【爬虫之scrapy框架——尚硅谷(学习笔记two)--爬取电影天堂(基本步骤)】

news2024/12/22 20:46:02

爬虫之scrapy框架--爬取电影天堂——解释多页爬取函数编写逻辑

    • (1)爬虫文件创建
    • (2)检查网址是否正确
    • (3)检查反爬
      • (3.1) 简写输出语句,检查是否反爬
      • (3.2) 检查结果
    • (4)函数编写和需求分析
      • (4.1)在items中定义数据类型
      • (4.2)分析网站xpath结构
        • (4.2.1)拿到第一页的名字和第二页要请求访问的网址
        • (4.2.2)完整第二页的网址和请求函数编写
        • (4.2.3)完整代码:
    • (5)开启管道
    • (6)管道封装(写入数据)
    • (6)运行爬虫
      • (6.1) 运行结果(ctrl+alt+L----可将数据排版一下)
    • (7)总结:(该案例的作用)

(1)爬虫文件创建

在这里插入图片描述

(2)检查网址是否正确

在这里插入图片描述

(3)检查反爬

(3.1) 简写输出语句,检查是否反爬

在这里插入图片描述

(3.2) 检查结果

scrapy crawl mv

在这里插入图片描述
在这里插入图片描述

(4)函数编写和需求分析

  1. 拿去名字
  2. 拿去图片

(4.1)在items中定义数据类型

在这里插入图片描述

(4.2)分析网站xpath结构

在这里插入图片描述

mv.py中编写函数:

(4.2.1)拿到第一页的名字和第二页要请求访问的网址

在这里插入图片描述

(4.2.2)完整第二页的网址和请求函数编写

在这里插入图片描述

(4.2.3)完整代码:
import scrapy
from scrapy_movie_99.items import ScrapyMovie99Item

class MvSpider(scrapy.Spider):
    name = "mv"
    allowed_domains = ["www.dyttcn.com"]
    # start_urls = ["https://www.dyttcn.com/"]
    start_urls = ["https://www.dyttcn.com/xijupian/list_4_1.html"]

    def parse(self, response):

        #根正则表达式列表
        a_list=response.xpath('//div[@class="co_content8"]//td[2]//a[3]')

        for a in a_list:
            #获取第一页的name,和要点击的链接
            name=a.xpath('./text()').extract_first()
            href=a.xpath('./@href').extract_first()

            #第二页的地址
            url='https://www.dyttcn.com'+href
            #访问第二页地址
            #发起访问
            yield scrapy.Request(url=url,callback=self.parse_second,meta={'name':name})

    def parse_second(self,response):
        src =response.xpath('//div[@id="Zoom"]//div/img/@src').extract_first()
        #print(src)
        #接收到请求的meta参数的值
        name=response.meta['name']

        #封装为数据结构
        #导入数据结构
        movie=ScrapyMovie99Item(src=src,name=name)
        yield movie





(5)开启管道

在这里插入图片描述

(6)管道封装(写入数据)

在这里插入图片描述
代码如下:

# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: https://docs.scrapy.org/en/latest/topics/item-pipeline.html


# useful for handling different item types with a single interface
from itemadapter import ItemAdapter


class ScrapyMovie99Pipeline:
    #打开文件
    def open_spider(self,spider):
        self.fp=open('movie.json','w',encoding='utf-8')

    #文件写入
    def process_item(self, item, spider):

        self.fp.write(str(item))
        return item


    #关闭文件
    def close_spider(self,spider):
        self.fp.close()

(6)运行爬虫

scrapy crawl mv

在这里插入图片描述

(6.1) 运行结果(ctrl+alt+L----可将数据排版一下)

在这里插入图片描述

(7)总结:(该案例的作用)

作用1:解释多页爬取函数编写逻辑
作用2:meta传递数据的使用

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

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

相关文章

Nginx生产环境最佳实践之配置灰度环境

你好呀,我是赵兴晨,文科程序员。 下面的内容可以说是干货满满建议先收藏再慢慢细品。 今天,我想与大家深入探讨一个我们日常工作中不可或缺的话题——灰度环境。你是否在工作中使用过灰度环境?如果是,你的使用体验如…

flutter开发实战-compute将工作交由isolate处理

flutter开发实战-compute将工作交由isolate处理 最近查看flutter文档时候,看到了compute可以将工作交由isolate处理。通过 Flutter 提供的 compute() 方法将解析和转换的工作移交到一个后台 isolate 中。这个 compute() 函数可以在后台 isolate 中运行复杂的函数并…

Leetcode 第 129 场双周赛题解

Leetcode 第 129 场双周赛题解 Leetcode 第 129 场双周赛题解题目1:3127. 构造相同颜色的正方形思路代码复杂度分析 题目2:3128. 直角三角形思路代码复杂度分析 题目3:3129. 找出所有稳定的二进制数组 I思路代码复杂度分析 题目4:…

JavaScript异步编程——11-异常处理方案【万字长文,感谢支持】

异常处理方案 在JS开发中,处理异常包括两步:先抛出异常,然后捕获异常。 为什么要做异常处理 异常处理非常重要,至少有以下几个原因: 防止程序报错甚至停止运行:当代码执行过程中发生错误或异常时&#x…

数字人解决方案——ID-Animator可保持角色一致生成视频动画

一、引 言 个性化或自定义生成在图像和视频生成领域是一个不断发展的研究方向,尤其是在创建与特定身份或风格一致的内容方面。您提到的挑战和解决方案为这一领域提供了有价值的见解: 训练成本高:这是一个普遍问题,因为个性化生成…

手机触控面板中应用的电容式触摸芯片

手机触控屏(Touch panel)又称为触控面板,是个可接收触头等输入讯号的感应式液晶显示装置,当接触了屏幕上的图形按钮时,屏幕上的触觉反馈系统可根据预先编程的程式驱动各种连结装置,可用以取代机械式的按钮面…

【AI】DeepStream(03):deepstream_test1_app

1、简介 deepstream-test1:演示各种 DeepStream 插件构建 GStreamer 管道。从文件中获取视频、解码、批处理,然后进行对象检测,最后在屏幕上渲染框。 源码路径:/opt/nvidia/deepstream/deepstream/sources/apps/sample_apps/deepstream-test1 先看下效果 2、编译 1)…

Redis-分片集群存储及读取数据详解

文章目录 Redis分片集群是什么?Redis分片集群的存储及读取数据? 更多相关内容可查看 Redis分片集群是什么? Redis分片集群是一种分布式部署方式,通过将数据分散存储在多个Redis节点上,从而提高了系统的性能、扩展性和…

【微记录】linux内核态日志如何持续观测?以及dmesg如何显示年月日时间戳?(dmesg -w ; -T)

文章目录 持续观测方法1方法2 dmes显示时间戳 持续观测 方法1 dmesg -w参考:https://man7.org/linux/man-pages/man1/dmesg.1.html 方法2 tail -f /var/log/kern.logdmes显示时间戳 dmesg -T #按照人类可读性高的时间戳 比如2024-05-15 01:20:16实操&#xff1…

快速学习SpringAi

Spring AI是AI工程师的一个应用框架,它提供了一个友好的API和开发AI应用的抽象,旨在简化AI应用的开发工序,例如开发一款基于ChatGPT的对话应用程序。通过使用Spring Ai使我们更简单直接使用chatgpt 1.创建项目 jdk17 引入依赖 2.依赖配置 …

敏捷开发最佳实践:自驱团队实践案例之心情曲线回顾会

调研发现,26%的中国企业认为最有价值管理实践是“团队回顾会”,而“团队回顾会”的确能够很好的引导团队走向自驱。在本节的实践案例中 “心情曲线回顾会”的具体做法较为典型,很值得参考。 本实践节选自《2021中国企业敏捷实践白皮书》&…

压力给到 Google,OpenAI 发布 GPT-4o 来了

北京时间5月14日凌晨1点,OpenAI 开启了今年的第一次直播,根据官方消息,这次旨在演示 ChatGPT 和 GPT-4 的升级内容。在早些时候 Sam Altman 在 X 上已经明确,「我们一直在努力开发一些我们认为人们会喜欢的新东西,对我…

OpenNJet产品体验:探索无限可能

文章目录 前言一、OpenNJet是什么?二、OpenNJet特性和优点三、OpenNJet功能规划四、OpenNJet快速上手五、OpenNJet的使用总结 前言 现代社会网络高速发展,同时也迎来了互联网发展的高峰,OpenNJet作为一个基于NGINX的面向互联网和云原生应用提…

爬虫入门经典(七) | 采集淘宝电场相关信息

大家好,我是不温卜火,昵称来源于成语—不温不火,本意是希望自己性情温和。 PS:由于现在越来越多的人未经本人同意直接爬取博主本人文章,博主在此特别声明:未经本人允许,禁止转载!&a…

string功能介绍(普及版)

目录 1。初始化(好几种方式),npos和string的使用说明 2。string的拷贝,隐式类型转换,[],size,iterator,begin,end,reverse,reverse_iterator&am…

【回溯】1240. 铺瓷砖

本文涉及知识点 回溯 LeetCode1240. 铺瓷砖 你是一位施工队的工长,根据设计师的要求准备为一套设计风格独特的房子进行室内装修。 房子的客厅大小为 n x m,为保持极简的风格,需要使用尽可能少的 正方形 瓷砖来铺盖地面。 假设正方形瓷砖的…

windows驱动开发-PCI和中断(二)

谈到中断使用PCI总线来作为例子是最合适的,在Windows发展过程中,PCI作为最成功的底层总线,集成了大量的外设,不夸张的说,目前PCI几乎是唯一的总线选择,故大部分情况下,只有PCI设备驱动程序会遇到…

前端 performance api使用 —— mark、measure计算vue3页面echarts渲染时间

文章目录 ⭐前言💖vue3系列文章 ⭐Performance api计算持续时间💖 mark用法💖 measure用法 ⭐计算echarts渲染的持续时间⭐结束 ⭐前言 大家好,我是yma16,本文分享关于 前端 performance api使用 —— mark、measure计…

java springboot连接sqlserver使用

pom.xml增加sqlserver驱动 <dependency><groupId>com.microsoft.sqlserver</groupId><artifactId>mssql-jdbc</artifactId><version>9.4.0.jre8</version></dependency>application.yml配置文件 server:port: 9001 #spring: …

多格式兼容的在线原型查看:Axure RP的便捷解决方案

Axure rp不仅可以绘制详细的产品构思&#xff0c;还可以在浏览器中生成html页面&#xff0c;但需要安装插件才能打开。安装Axure后 rpchrome插件后&#xff0c;还需要在扩展程序中选择“允许访问文件网站”&#xff0c;否则无法在Axure中成功选择 rp在线查看原型。听起来很麻烦…