Scrapy框架的基本使用教程

1、创建scrapy项目

        首先在自己的跟目录文件下执行命令:

PS D:\BCprogram\python_pro\bigdata> scrapy startproject theridion_grallator

scrapy + startproject + 项目名 具体执行操作如下:

1、创建项目目录:Scrapy会在当前工作目录下创建一个名为 theridion_grallator 的新目录。这个目录将成为你的Scrapy项目的根目录。
2、生成基本文件结构:在 theridion_grallator 目录下,Scrapy会自动生成一套标准的文件和子目录结构,包括但不限于:
    theridion_grallator/: 项目根目录。
    theridion_grallator/theridion_grallator/: 包含项目的设置文件 (settings.py)、爬虫模块(spiders/)、中间件 (middlewares.py)、管道 (pipelines.py) 等核心组件。
    theridion_grallator/items.py: 定义爬虫项目中数据模型的地方。
    theridion_grallator/pipelines.py: 数据处理的管道定义,用于清洗或存储爬取的数据。
    theridion_grallator/settings.py: 项目的配置文件,可以设置如用户代理、下载延迟等参数。
    theridion_grallator/spiders/: 存放所有爬虫脚本的目录,初始时可能为空或包含一个示例爬虫。
    scrapy.cfg: 项目的配置文件,位于根目录,用于指定项目的设置模块和其他元数据

2、创建一个爬虫程序 

        首先进入项目文件夹下,然后输入命令: 

scrapy genspider 爬虫程序的名称  要爬取网站的域名

D:\BCprogram\python_pro\bigdata\theridion_grallator> scrapy genspider game_4399 4399.com
 

当你运行 scrapy genspider game_4399 4399.com 命令时,Scrapy将执行以下操作:
1、创建爬虫文件:Scrapy会在 theridion_grallator/spiders/ 目录下创建一个名为 game_4399.py 的新文件。这个文件将包含你新建的爬虫的代码。
2、生成爬虫模板:打开 game_4399.py 文件,你会看到Scrapy已经为你生成了一个基本的爬虫模板,包括爬虫类 Game_4399 和一些默认方法,如 start_requests()、parse() 等。
3、配置爬虫域:Scrapy在爬虫类中设置了 allowed_domains 属性,将其值设为 ['4399.com'],这意味着爬虫将只对4399.com域名下的URL进行爬取。
4、设置起始URL:在 start_requests() 方法中,Scrapy通常会生成一个请求(Request 对象)到指定的域名(这里为 4399.com),作为爬虫开始爬取的起点。
5、定义解析函数:parse() 方法是默认的回调函数,当Scrapy收到响应后会调用它来解析网页内容。你需要根据4399.com网站的HTML结构来定制这个方法,以提取所需的数据。

3、编写爬虫程序

在game_4399.py文件中编写爬虫代码,代码如下

import scrapy
 
 
class Game4399Spider(scrapy.Spider):
    name = "game_4399"  # 爬虫程序的名称
    allowed_domains = ["4399.com"]  # 允许爬取的域名
    # 默认情况下是:https://4399.com
    # 但是我们不从首页开始爬取,所以改一下URL
    start_urls = ["https://4399.com/flash/"]  # 一开始爬取的URL
 
    def parse(self, response):  # 该方法用于对response对象进行数据解析
        # print(response)  # <200 http://www.4399.com/flash/>
        # print(response.text)  # 打印页面源代码
        # response.xpath()  # 通过xpath解析数据
        # response.css()  # 通过css解析数据
 
        # 获取4399小游戏的游戏名称
        # txt = response.xpath('//ul[@class="n-game cf"]/li/a/b/text()')
        # txt 列表中的每一项是一个Selector:
        # <Selector query='//ul[@class="n-game cf"]/li/a/b/text()' data='逃离克莱蒙特城堡'>]
        # 要通过extract()方法拿到data中的内容
        # print(txt)
 
        # txt = response.xpath('//ul[@class="n-game cf"]/li/a/b/text()').extract()
        # print(txt)  # 此时列表中的元素才是游戏的名字
 
        # 也可以先拿到每个li,然后再提取名字
        lis = response.xpath('//ul[@class="n-game cf"]/li')
        for li in lis:
            # name = li.xpath('./a/b/text()').extract()
            # # name 是一个列表
            # print(name)  # ['王城霸业']
 
            # 一般我们都会这么写:li.xpath('./a/b/text()').extract()[0]
            # 但是这样如果列表为空就会报错,所以换另一种写法
            # extract_first方法取列表中的第一个,如果列表为空,返回None
            name = li.xpath('./a/b/text()').extract_first()
            print(name)  # 王城霸业
 
            category = li.xpath('./em/a/text()').extract_first()  # 游戏类别
            date = li.xpath('./em/text()').extract_first()  # 日期
            print(category, date)
 
            # 通过yield向管道传输数据
            dic = {
                'name': name,
                'category': category,
                'date': date
            }
            # 可以认为这里是把数据返回给了管道pipeline,
            # 但是实际上是先给引擎,然后引擎再给管道,只是这个过程不用我们关心,scrapy会自动完成
            # 这里的数据会在管道程序中接收到
            yield dic

4、运行scrapy爬虫程序

在终端输入命令,就可以看到爬虫程序运行结果。

scrapy crawl 爬虫程序名称

D:\BCprogram\python_pro\bigdata\theridion_grallator> scrapy crawl game_4399

当你运行 scrapy crawl 爬虫程序名称 命令时,Scrapy执行以下操作来启动指定的爬虫:
1、加载项目设置:Scrapy首先读取项目根目录下的 settings.py 文件,加载项目配置。
2、初始化引擎:Scrapy初始化爬虫引擎,准备开始爬取流程。
3、启动爬虫:根据提供的爬虫名称,Scrapy会找到对应的爬虫类(通常在 spiders 目录下的Python文件中),并实例化这个爬虫。
4、执行start_requests:Scrapy调用爬虫类中的 start_requests 方法,这个方法返回一个或多个 Request 对象,表示要发起的HTTP请求。
5、调度请求:每个 Request 对象被添加到调度器(Scheduler)中,等待被发送到下载器(Downloader)。
6、下载网页:下载器接收到调度器的请求,下载网页内容,并生成一个 Response 对象。
7、解析响应:下载完成后的 Response 对象被传递给爬虫的解析函数(通常是 parse 或其他自定义的回调函数),在这里,爬虫解析HTML,提取数据,可能还会生成新的 Request 对象,形成新的爬取循环。
8、处理数据:提取到的数据通常会经过中间件的处理,然后传递给管道(Pipelines),在那里进行进一步的清洗、验证和持久化存储。
9、错误处理:如果在爬取过程中遇到错误,比如网络问题或服务器返回错误状态码,Scrapy会使用中间件和爬虫的错误处理逻辑来处理这些问题。
10、监控和控制:Scrapy提供了一套日志系统,可以记录爬取过程中的信息,还可以通过信号和扩展来实现更复杂的控制逻辑。
11、爬虫结束:当没有更多的请求待处理,或者达到预设的停止条件(如最大深度、最大请求数等),爬虫会停止运行。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【python中级】图像从从笛卡尔坐标系转换为极坐标系

【python中级】图像从从笛卡尔坐标系转换为极坐标系 1.背景2.生成二维图3.极坐标转换1.背景 笛卡尔坐标系就是我们常说的直角坐标系。 笛卡尔坐标系,也称为直角坐标系,是由法国数学家和哲学家勒内笛卡尔(Ren Descartes)发明的一种二维或三维坐标系统。它使用两个或三个相互…

【Qt】Qt开发环境搭建

目录 一. Qt SDK的下载&安装 二. Qt相关工具介绍 Qt的常用开发工具有&#xff1a; Qt CreatorVisual StudioEclipse 一. Qt SDK的下载&安装 Qt 下载官网&#xff1a; http://download.qt.io/archive/qt/ 国内清华源: https://mirrors.tuna.tsinghua.edu.cn/qt/arc…

C# WinForm —— 37 TabControl 控件介绍

1. 简介 管理一个TabPages集合的控件&#xff0c;也是一个分组控件 如果一个模块有多个子页面&#xff0c;可以使用TabControl控件进行页面切换 2. 属性 属性解释(Name)控件ID&#xff0c;在代码里引用的时候会用到Enabled控件是否启用Alignment确定选项卡是否显示在控件的…

扩散模型笔记2

Ref:扩散模型的原理及实现&#xff08;Pytorch&#xff09; 在扩散模型中&#xff0c;每一步添加的噪声并不是完全一样的。具体来说&#xff0c;噪声的添加方式和量在每一步是根据特定的规则或公式变化的。这里我们详细解释每一步添加噪声的过程。 正向过程中的噪声添加&…

两种转5V的DCDC电路:

最大电流&#xff1a;5A 最大电流&#xff1a;3A 验证通过&#xff1a;RT8289GSP性能更佳&#xff0c;带载能力更强&#xff1a;

前端JS特效第22波:jQuery滑动手风琴内容切换特效

jQuery滑动手风琴内容切换特效&#xff0c;先来看看效果&#xff1a; 部分核心的代码如下&#xff1a; <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xm…

Guitar Pro8.2让你的吉他弹奏如虎添翼!

亲爱的音乐爱好者们&#xff0c;今天我要跟大家安利一个让我彻底沉迷其中的神器——Guitar Pro8.2&#xff01;这可不是一般的软件&#xff0c;它简直是吉他手们的福音。不管你是初学者还是老鸟&#xff0c;这个打谱软件都能给你带来前所未有的便利和价值。 让我们来聊聊Guita…

昇思25天学习打卡营第9天|ResNet50图像分类

一、Resnet残差网络模型 构建残差网络结构;Building BlockBottleneck 残差结构由两个分支构成&#xff1a;一个主分支 &#x1d439;(&#x1d465;)&#xff0c;一个shortcuts&#xff08;图中弧线表示,&#x1d465;&#xff09;。 得到残差网络结构:&#x1d439;(&#x…

python根据父母身高预测儿子身高

题目 从键盘输入父母的升高&#xff0c;并使用eval()或float()转换输入的数据类型。计算公式&#xff1a;儿子身高&#xff08;父亲身高母亲身高&#xff09;*0.54. father_heighteval(input(请输入爸爸的身高&#xff1a;)) mother_heighteval(input(请输入妈妈的身高&#…

RAID 冗余磁盘阵列

RAID也是Linux操作系统中管理磁盘的一种方式。 只有Linux操作系统才支持LVM的磁盘管理方式。 而RAID是一种通用的管理磁盘的技术&#xff0c;使用于多种操作系统。 优势&#xff1a;提升数据的读写速度&#xff0c;提升数据的可靠性。具体实现哪什么功能&#xff0c;要看你所…

YOLOv8结合SAHI推理图像和视频

文章目录 前言视频效果必要环境一、完整代码二、运行方法1、 推理图像2、 推理视频 总结 前言 在上一篇文章中&#xff0c;我们深入探讨了如何通过结合YOLOv8和SAHI来增强小目标检测效果 &#xff0c;并计算了相关评估指标&#xff0c;虽然我们也展示了可视化功能&#xff0c;…

Open3D 点云的圆柱形邻域搜索

目录 一、概述 1.1原理 1.2应用 二、代码实现 2.1完整代码 2.2程序说明 三、实现效果 3.1原始点云 3.2搜索后点云 一、概述 1.1原理 圆柱邻域搜索的基本思想是确定点云中的哪些点位于给定圆柱的内部。一个圆柱可以由以下几个参数定义&#xff1a; 中心点&#xff1a;…

SpEL表达式相关知识点

SpEL表达式 知识点 Spel概述 Spring 表达式&#xff0c;即 Spring Expression Language&#xff0c;简称 SpEL。 那么是什么SpEL表达式呢&#xff1f; SpEL (Spring Expression Language) 是一种在Spring框架中用于处理表达式的语言。SpEL中的表达式可以支持调用bean的方法…

如何利用Github Action实现自动Merge PR

我是蚂蚁背大象(Apache EventMesh PMC&Committer)&#xff0c;文章对你有帮助给项目rocketmq-rust star,关注我GitHub:mxsm&#xff0c;文章有不正确的地方请您斧正,创建ISSUE提交PR~谢谢! Emal:mxsmapache.com 1. 引言 GitHub Actions 是 GitHub 提供的一种强大而灵活的自…

苍穹外卖 ...待更新

苍穹外卖 1、 阿里云OSS2、菜品分类查询 1、 阿里云OSS 工具类 package com.sky.utils;import com.aliyun.oss.ClientException; import com.aliyun.oss.OSS; import com.aliyun.oss.OSSClientBuilder; import com.aliyun.oss.OSSException; import lombok.AllArgsConstructor…

【QT】显示类控件

显示类控件 显示类控件1. label - 标签2. LCD Number - 显示数字的控件3. ProgressBar - 进度条4. Calendar Widget - 日历5. Line Edit - 输入框6. Text Edit - 多行输入框7. Combo Box - 下拉框8. Spin Box - 微调框9. Date Edit & Time Edit - 日期微调框10. Dial - 旋钮…

自注意力机制和多头注意力机制区别

Ref&#xff1a;小白看得懂的 Transformer (图解) Ref&#xff1a;一文彻底搞懂 Transformer&#xff08;图解手撕&#xff09; 多头注意力机制&#xff08;Multi-Head Attention&#xff09;和自注意力机制&#xff08;Self-Attention&#xff09;是现代深度学习模型&#x…

浅尝Apache Mesos

文章目录 1. Mesos是什么2. 共享集群3. Apache Mesos3.1 Mesos主节点3.2 Mesos代理3.3 Mesos框架 4. 资源管理4.1 资源提供4.2 资源角色4.3 资源预留4.4 资源权重与配额 5. 实现框架5.1 框架主类5.3 实现执行器 6. 小结参考 1. Mesos是什么 Mesos是什么&#xff0c;Mesos是一个…

8、Redis 的线程模型、I/O 模型和多线程

Redis 的线程模型、I/O 模型和多线程 1. Redis 的线程模型 Redis 以其高效的单线程模型著称&#xff0c;从设计之初&#xff0c;Redis 就选择了单线程模式&#xff0c;这在很大程度上简化了其内部实现和维护。单线程模式避免了多线程编程中常见的竞争条件和锁机制问题&#x…

【WebRTC实现点对点视频通话】

介绍 WebRTC (Web Real-Time Communications) 是一个实时通讯技术&#xff0c;也是实时音视频技术的标准和框架。简单来说WebRTC是一个集大成的实时音视频技术集&#xff0c;包含了各种客户端api、音视频编/解码lib、流媒体传输协议、回声消除、安全传输等。对于开发者来说可以…