Scrapy框架的基本使用教程

1、创建scrapy项目

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

PS D:\BCprogram\python_pro\bigdata> scrapy startproject theridion_grallatorscrapy + 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 scrapyclass Game4399Spider(scrapy.Spider):name = "game_4399"  # 爬虫程序的名称allowed_domains = ["4399.com"]  # 允许爬取的域名# 默认情况下是:https://4399.com# 但是我们不从首页开始爬取,所以改一下URLstart_urls = ["https://4399.com/flash/"]  # 一开始爬取的URLdef 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方法取列表中的第一个,如果列表为空,返回Nonename = 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.rhkb.cn/news/370888.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

001,函数指针是一种特殊的指针,它指向的是一个函数地址,可以存储函数并作为参数传递,也可以用于动态绑定和回调函数

函数指针是一种特殊的指针 001&#xff0c;函数指针是一种特殊的指针&#xff0c;它指向的是一个函数地址&#xff0c;可以存储函数并作为参数传递&#xff0c;也可以用于动态绑定和回调函数 文章目录 函数指针是一种特殊的指针前言总结 前言 这是ai回答的标准答案 下面我们…

bash条件判断基础adsawq1`1nn

判断的作用 判断后续操作的提前条件是否满足如果满足执行一种命令不满足则执行另一种指令 条件测试类型&#xff1a; 整型测试字符测试文字测试 整数测试&#xff1a;比较两个整数谁大谁小&#xff0c;是否相等&#xff1b; 二元测试&#xff1a; num1 操作符 num2 -eq: 等于…

Alt与Tab切换窗口时将Edge多个标签页作为一个整体参与切换的方法

本文介绍在Windows电脑中&#xff0c;使用Alt与Tab切换窗口时&#xff0c;将Edge浏览器作为一个整体参与切换&#xff0c;而不是其中若干个页面参与切换的方法。 最近&#xff0c;需要将主要使用的浏览器由原本的Chrome换为Edge&#xff1b;但是&#xff0c;在更换后发现&#…

基于RK3588的8路摄像头实时全景拼接

基于RK3588的8路摄像头实时全景拼接 输入&#xff1a;2路csi转8路mpi的ahd摄像头&#xff0c;分辨率1920 * 1080 8路拼接结果&#xff1a; 6路拼接结果&#xff1a; UI界面&#xff1a; UI节目设计原理

Lua、AB包热更新总结

1.AB包热更新 &#xff08;1&#xff09;AB包是一种特定的压缩文件&#xff0c;可以放模型贴图音效等等 &#xff08;2&#xff09;Resources目录下打包时只读 无法修改&#xff1b;而AB包存储的位置是自定义的&#xff0c;能够动态更新&#xff0c;同时可以决定资源包初始的大…

huggingface笔记:gpt2

0 使用的tips GPT-2是一个具有绝对位置嵌入的模型&#xff0c;因此通常建议在输入的右侧而不是左侧填充GPT-2是通过因果语言建模&#xff08;CLM&#xff09;目标进行训练的&#xff0c;因此在预测序列中的下一个标记方面非常强大 利用这一特性&#xff0c;GPT-2可以生成语法连…

人工智能时代打工人摸鱼秘籍(1)- 为啥说大模型像人?

人工智能以势不可挡的方式席卷全球。 所有公司&#xff0c;都在削尖脑袋想&#xff0c;如何在在产品、营销、运营、服务和管理上加持大人工智能的能力。 公司在卷生卷死的时候&#xff0c;有一批人已经偷偷在用大模型提&#xff08;摸&#xff09;效&#xff08;鱼&#xff09;…

昇思25天学习打卡营第1天|初识MindSpore

# 打卡 day1 目录 # 打卡 day1 初识MindSpore 昇思 MindSpore 是什么&#xff1f; 昇思 MindSpore 优势|特点 昇思 MindSpore 不足 官方生态学习地址 初识MindSpore 昇思 MindSpore 是什么&#xff1f; 昇思MindSpore 是全场景深度学习架构&#xff0c;为开发者提供了全…

KDP数据分析实战:从0到1完成数据实时采集处理到可视化

智领云自主研发的开源轻量级Kubernetes数据平台&#xff0c;即Kubernetes Data Platform (简称KDP)&#xff0c;能够为用户提供在Kubernetes上的一站式云原生数据集成与开发平台。在最新的v1.1.0版本中&#xff0c;用户可借助 KDP 平台上开箱即用的 Airflow、AirByte、Flink、K…

LLMs之gptpdf:gptpdf的简介、安装和使用方法、案例应用之详细攻略

LLMs之gptpdf&#xff1a;gptpdf的简介、安装和使用方法、案例应用之详细攻略 目录 gptpdf的简介 1、处理流程 第一步&#xff0c;使用 PyMuPDF 库&#xff0c;对 PDF 进行解析出所有非文本区域&#xff0c;并做好标记&#xff0c;比如: 第二步&#xff0c;使用视觉大模型&…

RUST 编程语言 绘制随机颜色图片 画圆形 画矩形 画直线

什么是Rust Rust是一种系统编程语言&#xff0c;旨在提供高性能和安全性。它是由Mozilla和其开发社区创建的开源语言&#xff0c;设计目标是在C的应用场景中提供一种现代、可靠和高效的选择。Rust的目标是成为一种通用编程语言&#xff0c;能够处理各种计算任务&#xff0c;包…

基于若依的文件上传、下载

基于若依实现文件上传、下载 文章目录 基于若依实现文件上传、下载1、前端实现-文件上传1.1 通用上传分析1.2 修改实现上传接口 2、后端实现-文件上传3、后端实现-文件下载4、前端实现-文件下载 官网其实也写了&#xff0c;但是我是自己改造封装了一下&#xff0c;再次迈向全栈…

3.js - 模板渲染 - 简单

3.js 真tm枯燥啊&#xff0c;狗都不学 效果图 源码 // ts-nocheck// 引入three.js import * as THREE from three// 导入轨道控制器 import { OrbitControls } from three/examples/jsm/controls/OrbitControls// 导入lil.gui import { GUI } from three/examples/jsm/libs/li…

elementui中日期/时间的禁用处理,使用传值的方式

项目中,经常会用到 在一个学年或者一个学期或者某一个时间段需要做的某件事情,则我们需要在创建这个事件的时候,需要设置一定的时间周期,那这个时间周期就需要给一定的限制处理,避免用户的误操作,优化用户体验 如下:需求为,在选择学年后,学期的设置需要在学年中,且结束时间大…

使用京东云主机搭建幻兽帕鲁游戏联机服务器全流程,0基础教程

使用京东云服务器搭建幻兽帕鲁Palworld游戏联机服务器教程&#xff0c;非常简单&#xff0c;京东云推出幻兽帕鲁镜像系统&#xff0c;镜像直接选择幻兽帕鲁镜像即可一键自动部署&#xff0c;不需要手动操作&#xff0c;真正的新手0基础部署幻兽帕鲁&#xff0c;阿腾云整理基于京…

【LabVIEW学习篇 - 2】:LabVIEW的编程特点

文章目录 LabVIEW的编程特点图形编程天然并行运行基于数据流运行 LabVIEW的编程特点 图形编程 LabVIEW使用图形化的图形化编程语言&#xff08;G语言&#xff09;&#xff0c;用户通过在程序框图中拖放和连接各种节点&#xff08;Nodes&#xff09;来编写程序。每个节点代表一…

图像增强 目标检测 仿射变换 图像处理 扭曲图像

1.背景 在目标检测中&#xff0c;需要进行图像增强。这里的代码模拟了旋转、扭曲图像的功能&#xff0c;并且在扭曲的时候&#xff0c;能够同时把标注的结果也进行扭曲。 这里忽略了读取xml的过程&#xff0c;假设图像IMG存在对应的标注框&#xff0c;且坐标为左上、右下两个…

vue学习笔记(购物车小案例)

用一个简单的购物车demo来回顾一下其中需要注意的细节。 先看一下最终效果 功能&#xff1a; &#xff08;1&#xff09;全选按钮和下面的商品项的选中状态同步&#xff0c;当下面的商品全部选中时&#xff0c;全选勾选&#xff0c;反之&#xff0c;则不勾选。 &#xff08…

SpringBoot新手快速入门系列教程四:创建第一个SringBoot的API

首先我们用IDEA新建一个项目&#xff0c;请将这些关键位置按照我的设置设置一下 接下来我将要带着你一步一步创建一个Get请求和Post请求&#xff0c;通过客户端请求的参数&#xff0c;以json格式返回该参数{“message”:"Hello"} 1,先在IDE左上角把这里改为文件模式…

华为云OBS 通过S3客户端访问

华为云好像没有对S3协议的支持说明其实底层是支持S3协议的。 使用S3的时候我们会需要endpoint&#xff0c;桶名字&#xff0c;region&#xff0c;AWS_ACCESS_KEY,AWS_SECRET_KEY 其中endpoint 就是图片中的&#xff0c;桶名字也很容易找到&#xff0c;region 就是你的endpoint…