Scrapy管道设置和数据保存
1.1 介绍部分:
文字提到常用的Web框架有Django和Flask,接下来将学习一个全球范围内流行的爬虫框架Scrapy。
1.2 内容部分:
Scrapy的概念、作用和工作流程
Scrapy的入门使用
Scrapy构造并发送请求
Scrapy模拟登陆
Scrapy管道的使用
Scrapy中间件的使用
Scrapy_redis概念作用和流程
Scrapy_redis原理分析并实现断点续爬以及分布式爬虫
Scrapy_splash组件的使用
Scrapy的日志信息与配置
Scrapyd部署Scrapy项目
1.2.1 原始爬虫工作流程
原始框架转换成矩形展示
1.2.2 scrapy框架模型
其流程可以描述如下:
爬虫中起始的url构造成request对象–>爬虫中间件–>引擎–>调度器
调度器把request–>引擎–>下载中间件–>下载器
下载器发送请求,获取response响应–>下载中间件–>引擎–>爬虫中间件–>爬虫
爬虫提取url地址,组装成request对象–>爬虫中间件–>引擎–>调度器,重复步骤2
用人话描述 spiders模块会解析最初始的url,发送给engine引擎调度器,然后由调度器发送给Downloader下载器,下载器将响应返回给调度器,调度器把响应派发给Spiders,想用传递给Spider会被内部的parse解析
自定义的下载器代码
import scrapyclass ItcastSpider(scrapy.Spider):name = "itcast"allowed_domains = ["itcast.cn"]start_urls = ["https://itcast.cn"]def parse(self, response):#定义对于网站的相关操作pass
1.2.3 scrapy3个内置对象
request请求对象:由url、method、post_data、header等构成
response响应对象:由url、body、status、headers等构成
item数据对象:本质是个字典
1.2.4 scrapy每个模块的作用
1.2.5 安装scrapy
pip install scrapy
1.2.6 开发流程
创建项目:
scrapy startproject mySpider
生成一个爬虫:
scrapy genspider itcast itcast.cn
提取数据:
根据网站结构在spider中实现数据采集相关内容
保存数据:
使用pipeline进行数据后续处理和保存
1.2.7 创建项目
创建scrapy项目的命令:
scrapy startproject <项目名字>
示例:
scrapy startproject myspider
生成的目录和文件结果如下:
1.2.8 scrapy中各文件作用
- spider文件夹一般爬虫都放置在该文件夹中。
- items.py负责处理被spider提取出来的item,定义数据。
- pipelines.py通道文件, 当我们的items被返回的时候,会自动调用我们的pipelines类中process_item()(需要加到settings.py里面)
- middlewares.pyscrapy框架的扩展插件
- setting.pyscrapy爬虫的配置文件。
1.2.9 创建爬虫
通过命令创建出爬虫文件,爬虫文件为主要的代码作业文件,通常一个网站的爬取动作都会在爬虫文件中进行编写。
命令:
在项目路径下执行:
scrapy genspider <爬虫名字> <允许爬取的域名>
爬虫名字:作为爬虫运行时的参数
允许爬取的域名:为对于爬虫设置的爬取范围,设置之后用于过滤要爬取的url,如果爬取的url与允许的域不通则被过滤掉。
示例:
cd myspider
scrapy genspider itcast itcast.cn
1.2.10 启动爬虫
import scrapyclass ItcastSpider(scrapy.Spider):name = "itcast"# 2.检查域名allowed_domains = ['itcast.cn']# 1.修改起始urlstart_urls = ['http://www.itcast.cn/channel/teacher.shtml#ajavaee']# 3. 在parse方法中实现爬取逻辑def parse(self, response):# 定义对于网站的相关操作# with open('itcast.html', 'wb') as f:# f.write(response.body)# 获取所有教师节点node_list = response.xpath('//div[@class="li_txt"]')print("获取所有教师节点长度:",len(node_list))data_list = []# 遍历教师节点列表for node in node_list:temp = {}#xpath 方法返回的是选择器对象列表,extract()会获取不是空列表的第一个值temp['name'] = node.xpath('./h3/text()').extract()temp['title'] = node.xpath('./h4/text()').extract()temp['desc'] = node.xpath('./p/text()').extract()print(temp)yield temp# data_list.append(temp)# return data_list
运行scrapy
命令:在项目目录下执行scrapy crawl
示例:scrapy crawl itcast
scrapy crawl itcast --nolog 可以关闭日志,降低干扰
关于Scrapy爬虫的要点,包括:
- Scrapy.Spider爬虫必须有名为parse的解析函数:该函数是处理和提取数据的关键。
- 可以自定义其他解析函数:如果网站结构复杂,可以通过自定义解析函数处理特定的页面或数据。
- 解析函数中提取的URL地址如果要发送请求,必须属于allowed_domains范围内:这是一种安全措施,确保爬虫只访问指定的域名范围。
- start_urls中的URL地址不受这个限制:初始URL可以不在allowed_domains范围内,但后续解析的URL必须符合规定。
- 启动爬虫时注意启动的位置:应该在项目路径下启动,以确保正确加载项目配置和资源。
- parse()函数中使用yield返回数据:yield可以返回BaseItem, Request, dict或None。
1.2.11 定位元素以及提取数据、属性值的方法
解析并获取Scrapy爬虫中的数据:利用XPath规则对字符串进行定位和提取
response.xpath
方法的返回结果是一个类列表的类型 其中包含的是selector
对象,操作和列表一样,但是有一些额外的方法- 额外方法
extract()
:返回一个包含字符串的列表 - 额外方法
extract_first()
:返回列表中的第一个字符串,列表为空时返回None
1.2.12 response响应对象的常用属性
- response.url: 当前响应的 URL 地址
- response.request.url: 当前响应对应的请求的 URL 地址
- response.headers: 响应头
- response.request.headers: 当前响应的请求头
- response.body: 响应体,也就是 HTML 代码,类型为 byte
- response.status: 响应状态码
1.2.13 保存数据
利用管道pipeline来处理(保存)数据
1.2.14 在pipelines.py文件中定义对数据的操作
- 定义一个管道类
- 重写管道类的process_item方法
- process_item方法处理完item之后必须返回给引擎
import jsonclass ItcastPipeline():# 爬虫文件中把数据传输的方法每次yield一个item, 就会运行一次# 该方法为固定存储函数def process_item(self, item, spider):print(item)return item
1.2.15 在 settings.py
配置启用管道
ITEM_PIPELINES = {'myspider.pipelines.ItcastPipeline': 400
}
这个配置用于在 Scrapy 项目的 settings.py
文件中启用数据管道。通过将管道类 ItcastPipeline
添加到 ITEM_PIPELINES
字典中,并设置一个优先级(例如 400
),Scrapy 将会在处理每个 item
时调用该管道。
配置项中键为使用的管道类,管道类使用.进行分割,第一个为项目目录,第二个为文件,第三个为定义的管道类。
配置项中值为管道的使用顺序,设置的数值越小越优先执行,该值一般设置为1000以内。
1.2.16 pipelines.py更新数据操作,保存数据
# 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
import json# useful for handling different item types with a single interface
from itemadapter import ItemAdapterclass MyspiderPipeline:def __init__(self):self.file = open('itcast.json', 'w',encoding='utf-8')def process_item(self, item, spider):# print("itcast:", item)# 默认使用完管道之后将需要的数据返回给引擎# 将字典数据序列化json_data = json.dumps(item,ensure_ascii=False)+',\n'# 将数据写入文件self.file.write(json_data)return itemdef __del__(self):self.file.close()
相关文章:
Scrapy管道设置和数据保存
1.1 介绍部分: 文字提到常用的Web框架有Django和Flask,接下来将学习一个全球范围内流行的爬虫框架Scrapy。 1.2 内容部分: Scrapy的概念、作用和工作流程 Scrapy的入门使用 Scrapy构造并发送请求 Scrapy模拟登陆 Scrapy管道的使用 Scrapy中…...
Jenkins的使用
文章目录 一、Jenkins是什么\有什么用\与GitLab的对比二、Jenkins的安装与配置Jenkins的安装方式在Linux上安装Jenkins:在Windows上安装Jenkins:配置Jenkins: (可选)配置启动用户为root(一定要是root吗??…...
计算机基础 原码反码补码问题
整数的二进制的表示形式:其实有三种 原码:直接根据数值写出的二进制序列就是原码 反码:原码的符号位不变,其他位按位取反就是反码 补码:反码1,就是补码 负数:-1 以补码形式存放在内存 写出 -1…...
ORB-SLAM2 ----- LocalMapping::SearchInNeighbors()
文章目录 一、函数意义二、函数讲解三、函数代码四、本函数使用的匹配方法ORBmatcher::Fuse()1. 函数讲解2. 函数代码 四、总结 一、函数意义 本函数是用于地图点融合的函数,前面的函数生成了新的地图点,但这些地图点可能在前面的关键帧中已经生成过了&a…...
游戏引擎学习第27天
仓库:https://gitee.com/mrxiao_com/2d_game 欢迎 项目的开始是从零开始构建一款完整的游戏,完全不依赖任何库或引擎。这样做有两个主要原因:首先,因为这非常有趣;其次,因为它非常具有教育意义。了解游戏开发的低层次…...
【超全总结】深度学习分割模型的损失函数类别及应用场景
《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】3.【手势识别系统开发】4.【人脸面部活体检测系统开发】5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】7.【…...
基于HTML和CSS的校园网页设计与实现
摘要 随着计算机、互联网与通信技术的进步,Internet在人们的学习、工作和生活中的地位也变得越来越高,校园网站已经成为学校与学生,学生与学生之间交流沟通的重要平台,对同学了解学校内发生的各种事情起到了重要的作用。学校网站…...
深度学习基础02_损失函数BP算法(上)
目录 一、损失函数 1、线性回归损失函数 1.MAE损失 2.MSE损失 3.SmoothL1Loss 2、多分类损失函数--CrossEntropyLoss 3、二分类损失函数--BCELoss 4、总结 二、BP算法 1、前向传播 1.输入层(Input Layer)到隐藏层(Hidden Layer) 2.隐藏层(Hidden Layer)到输出层(Ou…...
Flutter:列表分页,上拉加载下拉刷新,在GetBuilder模板使用方式
GetBuilder模板使用方式参考上一节 本篇主要代码记录如何使用上拉加载下拉刷新, 接口请求和商品组件的代码不包括在内 pubspec.yaml装包 cupertino_icons: ^1.0.8# 分页 上拉加载,下拉刷新pull_to_refresh_flutter3: 2.0.2商品列表:controlle…...
使用eclipse构建SpringBoot项目
我这里用eclipse2018版本做演示,大家有需要的可以下载Eclipse Downloads | The Eclipse Foundation 1.打开eclipse,选择存放代码的位置 2.选择 file >> new >> project >> 选择springboot文件下的 spring starter project 2.这里选择N…...
Linux系统存储挂载与管理:从基础到高级
标题:Linux系统存储挂载与管理:从基础到高级 摘要 在Linux系统中,合理的存储管理和分配对于系统的性能、稳定性和资源利用至关重要。本文将详细介绍存储挂载的基本概念、如何进行存储分配和管理,并解释系统盘的作用。通过这些内…...
Flutter 权限申请
这篇文章是基于permission_handler 10.2.0版本写的 前言 在App开发过程中我们经常要用到各种权限,我是用的是permission_handler包来实现权限控制的。 pub地址:https://pub.dev/packages/permission_handler permission_handler 权限列表 变量 Androi…...
Linux之信号的产生,保存,捕捉
Linux之信号的产生,保存,捕捉处理 一.信号的概念1.1概念1.2分类 二.信号的产生2.1通过键盘产生的信号2.2系统调用接口产生的信号2.3硬件异常产生的信号2.4软件条件产生的信号 三.信号的保存四.信号的捕捉五.信号的其他杂碎知识5.1可重入函数5.2volatile关…...
基于AutoEncode自编码器的端到端无线通信系统matlab误码率仿真
目录 1.算法仿真效果 2.算法涉及理论知识概要 3.MATLAB核心程序 4.完整算法代码文件获得 1.算法仿真效果 matlab2022a仿真结果如下(完整代码运行后无水印): 仿真操作步骤可参考程序配套的操作视频。 2.算法涉及理论知识概要 自编码器是…...
泛化调用 :在没有接口的情况下进行RPC调用
什么是泛化调用? 在RPC调用的过程中,调用端向服务端发起请求,首先要通过动态代理,动态代理可以屏蔽RPC处理流程,使得发起远程调用就像调用本地一样。 RPC调用本质:调用端向服务端发送一条请求消息&#x…...
2025年人工智能,自动化与机械工程国际学术会议(AIAME2025)
早鸟通道开启: 2025年人工智能,自动化与机械工程国际学术会议(AIAME2025) 2025 International Conference on Artificial Intelligence, Automation, and Mechanical Engineering 【重要日期】 早鸟征稿截止日期:…...
docker compose 快速搭建Nacos单节点测试环境(mysql 版)
〓 参考: https://nacos.io/docs/latest/quickstart/quick-start-docker/?sourcewuyi https://github.com/nacos-group/nacos-docker https://nacos.io/docs/latest/manual/admin/deployment/deployment-standalone/?sourcewuyi https://nacos.io/docs/latest/man…...
数字3D虚拟展厅成熟运用于旅游业
在数字空间展览会与VR3D虚拟企业展厅设计的兴起中,我们迎来了互联网、物联网与3D技术融合的大时代。这些企业虚拟展厅主要依托互联网作为传播媒介,利用图片、文字和Flash动画等形式,生动展现企业的核心产品。作为一种新型的网络信息技术展厅&…...
模数转换芯片AD9215
AD9215 是 Analog Devices 公司推出的一款高性能、低功耗、单通道 10 位模数转换器(ADC)。它具有采样速率高达 65 MSPS 或 105 MSPS(不同型号),并广泛应用于通信、成像和仪器仪表等领域。 AD9215 的关键特性 分辨率: 10 位,适合高精度应用。采样速率: 两种型号: AD921…...
MongoDB注入攻击测试与防御技术深度解析
MongoDB注入攻击测试与防御技术深度解析 随着NoSQL数据库的兴起,MongoDB作为其中的佼佼者,因其灵活的数据模型和强大的查询能力,受到了众多开发者的青睐。然而,与任何技术一样,MongoDB也面临着安全威胁,其…...
总结贴:Servlet过滤器、MVC拦截器
一:Servlet过滤器 1.1解析 Filter 即为过滤,用于请求到达Servlet之前(Request),以及再Servlet方法执行完之后返回客户端进行后处理(HttpServletResponse)。简单说就是对请求进行预处理,对响应进行后处理 在请求到达Servlet之前,可以经过多个Filt…...
鸿蒙开发-在ArkTS中制作音乐播放器
音频播放功能实现 导入音频播放相关模块 首先需要从ohos.multimedia.audio模块中导入必要的类和接口用于音频播放。例如: import audio from ohos.multimedia.audio;创建音频播放器实例并设置播放源 可以通过audio.createAudioPlayer()方法创建一个音频播放器实…...
mapstruct DTO转换使用
定义一个基础接口 package com.example.mapstruct;import org.mapstruct.Named;import java.time.LocalDate; import java.time.LocalDateTime; import java.time.ZoneId; import java.time.ZonedDateTime; import java.util.Date; import java.util.List;/*** Author zmn Dat…...
C++内存对齐
一、内存对齐的定义 内存对齐是一种计算机内存管理策略。在这种策略下,数据存储的内存地址必须是数据类型大小(或者是某个特定对齐模数)的整数倍。 例如,在一个 32 位系统中,如果一个int类型(通常占用 4 …...
关于node全栈项目打包发布linux项目问题总集
1.用pm2部署nest 说明:如果一开始将nest直接打包放到linux服务器上用pm2执行则会报错,这是因为tsconfig.build.tsbuildinfo文件的路径以及相关依赖问题。 报错会为:什么东西找不到.... 所以建议以下为步骤一步一步配置 将整个nest添加压缩包直…...
40 基于单片机的温湿度检测判断系统
目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于STC89C52单片机,采用dht11温湿度传感器检测温湿度, 通过lcd1602显示屏各个参数,四个按键分别可以增加温湿度的阈值, 如果超过阈值,则…...
Vue 原理详解
Vue 原理详解 Vue.js 是一个渐进式框架,它通过数据驱动视图更新和响应式编程使得前端开发变得更加简单高效。在 Vue 的内部实现中,编译过程和响应式机制是两个至关重要的组成部分。本文将详细介绍 Vue.js 的编译器、响应式系统和运行时的工作原理&#…...
w064基于springboot的高校学科竞赛平台
🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以查看文章末尾⬇️联系方式获取,记得注明来意哦~🌹赠送计算机毕业设计600个选题excel文件࿰…...
vue实现弹窗输入验证码
实现思路:前端输入完账号和密码,点击登录按钮的时候,弹出一个输入验证码的窗口,后端把验证码图片通过base64的字符传给前端,前端把字符当成图片展示出来。输入完验证码,点击确认进行登录,把验证…...
maven,java相关调试等
maven 增加调试信息的命令: mvn clean compile -Xmvn -X clean installmvn -e exec:execmodule jdk.compiler does not “opens com.sun.tools.java c.processing” 报错是因为用了JDK17,而老版本的1.18.4不支持。将lombok升级到1.18.32问题解决。 报错…...
ARP欺骗-断网攻击
ARP协议 arp协议(地址解析) ,在局域网中传输的是帧,帧里面有目标主机的MAC地址,其中一台电脑和另一台电脑需要知道对面的ip地址所对应的MAC地址 ARP欺骗的原理 把自己的MAC地址伪造成网段来欺骗其他用户 实验环境 kali:192.168.21.128 win…...
鬼谷子的捭阖之道
捭(bai)是打开,开口说的意思,代表阴阳中的阳面 阖(he)是关闭,是闭嘴、观察,代表阴阳中的阴面 捭阖就是通过话术来试探对方的实情,用谋略让对方信服,从而推动…...
mysql之找回忘记的root密码
mysql之找回忘记的root密码 1.方法1,init-file重置密码2.方法2,–skip-grant-tables重置密码 1.方法1,init-file重置密码 使用init-file参数来对密码进行重新设置 1.停止mysql服务进程 首先将mysql的服务停用掉; 输入命令&#x…...
IDEA中Maven相关使用
一、Maven 的配置文件与本地仓库 Maven 是一种基于配置的工具,主要通过 配置文件 和 本地仓库 管理项目构建与依赖。 1. Maven 配置文件的层级 Maven 的配置文件分为两个层级:全局配置 和 用户配置。 (1)全局配置 位置&#…...
C语言基础数据类型
C语言------基础数据类型 思考、实践、总结、交流,八字真言是学习任何一门知识的内功,尤其是在很方便用鸡皮提的时代中,独立思考是很重要的。 一个 C 语言工程由多个.c(源码文件) .h(头文件)组成。.c 文件是实现逻辑的…...
excel中字符数字转换为数值类型:NUMBERVALUE()函数
excel中字符数字转换为数值类型:NUMBERVALUE()函数 例子: 假如这个文档被设置为文档类型:可以通过这个函数进行转换 有时候这个函数不起作用:可以试试对目标列的第一个字符数字进行设置单元单元格-设置为数值型 然后对第一个字…...
【LeetCode刷题之路】283:移动零的普通解法与优化解法(含动图演示)
LeetCode刷题记录 🌐 我的博客主页:iiiiiankor🎯 如果你觉得我的内容对你有帮助,不妨点个赞👍、留个评论✍,或者收藏⭐,让我们一起进步!📝 专栏系列:LeetCode…...
AtomicIntegerFieldUpdater能否降低内存
1. 代码如下: import java.util.LinkedList; import java.util.List; import java.util.concurrent.atomic.AtomicInteger;public class AtomicIntegerTest {final AtomicInteger startPosition new AtomicInteger(0);final AtomicInteger wrotePosition new Atom…...
一个实用的 Maven localRepository 工具
目录 1 现状2 当前解决3 更好的解决3.1 下载 Maven localRepository 工具包3.2 上传本地 localRepository 包3.3 清理 localRepository 中指定后缀的文件 1 现状 在使用 Maven 时,我们可能会经常与本地仓库和私服仓库打交道。 例如对于本地仓库,因为某…...
【算法day4】链表:应用拓展与快慢指针
题目引用 两两交换链表节点删除链表的倒数第n个节点链表相交环形链表 1.两两交换链表节点 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换&am…...
拉格朗日乘子法和罚函数法
求目标函数 f ( x , y ) x 2 y 2 f(x, y) x^2 y^2 f(x,y)x2y2 的极值 约束条件为: g ( x , y ) x y − 1 0 g(x, y) x y - 1 0 g(x,y)xy−10 直接求解 消去变量由约束条件 x y − 1 0 x y - 1 0 xy−10,可得 y 1 − x y 1 - x y1−…...
关于创建新登录用户使用SQL Server验证登录时报错全过程解决方法(错误: 18456,不包含网络连接,此教程为本地单机连接)
想必大家在创建新登录用户时会遇到一些问题例如: 但是账号密码都已经反复确认过没错了 之前我在很多博文看到的解决方法都不能正确解决这个问题,接下来我就来解决下这个问题 1.首先创建一个新的登录用户 下面配置是这样子的: 登录名test login 密码12…...
前端通用Axios 请求拦截配置
前端通用Axios 请求拦截配置 配置 目录在request或者plugins都可以,看自己习惯 文件名ReqAxios.js/ReqAxios.ts import axios from "axios"; //消息提示 import { message } from "ant-design-vue"; import Vue from vueconst reqAxios ax…...
docker搭建socks5代理
准备工作 VPS安全组/策略放行相应端口如启用了防火墙,放行相应端口 实际操作 我们选用“历史悠久”的Dante socks5 代理服务器,轻量、稳定。Github也有对dante进行进一步精简的镜像,更为适宜。github项目地址如下: https://gi…...
抓包之wireshark基础用法介绍
写在前面 wireshark作为最优秀的抓包工具,有必要详细的看下其基本用法,所以本文就一起来做这件事吧! 1:初步介绍 打开wireshark首先会进入如下的界面: 想要开始抓包,需要进行如下操作: 接着…...
JVM的生命周期
目录 引言1. 虚拟机的启动1.1 引导类加载器1.2 初始化步骤 2. 虚拟机的执行2.1 主要任务2.2 运行时数据区2.3 垃圾收集2.3.1 标记-清除算法2.3.2 复制算法2.3.3 标记-整理算法2.3.4 分代收集 3. 虚拟机的退出3.1 正常退出3.2 异常退出3.3 其他退出方式3.4 关闭钩子 4. 结论 引言…...
【第三讲】Spring Boot 3.4.0 新特性详解:增强的配置属性支持
Spring Boot 3.4.0 版本在配置属性的支持上进行了显著增强,使得开发者能够更灵活地管理和使用应用程序的配置。新的特性包括对配置属性的改进、类型安全增强、以及对环境变量的更好支持。这些改进旨在提升开发效率和代码可读性,同时简化配置过程。本文将…...
搭建环境-PHP简介及环境搭建教程
搭建环境-PHP简介及环境搭建教程 前言 在现代Web开发中,PHP是一种广泛使用的服务器端脚本语言,它以简洁、高效和跨平台的特性受到开发者的青睐。无论是小型网站还是大型企业应用,PHP都能提供强大的支持。本文将为您详细介绍PHP的基本概念、特点,以及如何搭建PHP开发环境。…...
linux模拟HID USB设备及wireshark USB抓包配置
文章目录 1. 内核配置2. 设备配置附 wireshark USB抓包配置 linux下模拟USB HID设备的简单记录,其他USB设备类似。 1. 内核配置 内核启用USB Gadget,使用fs配置usb device信息。 Device Drivers ---> [*] USB support ---><*> USB …...
微前端架构 qiankun
背景:随着业务功能的扩展,原有开发模式已无法满足需求。上线后出现问题时,排查过程变得异常复杂,新开发人员也难以迅速理解现有代码。同时,系统间界面风格和交互差异较大,导致跨系统办理业务时工作量增加。…...