python爬虫之Scrapy框架--测试调试--保存数据

news2024/11/25 2:46:37

 

目录

 ScrapyShell

启动ScrapyShell

基本方法

注意

保存数据到文件 

方法一

使用python原生方式保存

方法二 

使用Scrapy内置方式

方法三 

Item Pipeline的使用

功能


 ScrapyShell

ScrapyShell是Scrapy框架提供的一个交互式的开发工具,用于调试和测试爬虫(可以在不运行spider项目时,快速调试 scrapy 代码。)。它提供了一个类似Python交互式解释器的环境,在这个环境中,可以实时执行Scrapy的命令和代码,并查看抓取到的数据和网页的解析结果。ScrapyShell是一个强大的工具,可以快速验证和调整爬虫的逻辑,以及检查和提取目标网站的数据。

 一般用于测试xpath或css表达式,查看它们是否能提取想要的数据

启动ScrapyShell

  1. 打开命令行终端或命令提示符窗口。

win+r 输入cmd 

  1. 导航到您的Scrapy项目的根目录。
cd 根目录
  1. 运行以下命令:
scrapy shell

这就成功启动ScrapyShell,将自动加载你的Scrapy项目的配置和代码。

基本方法

  • 使用fetch(url)命令来下载指定URL的网页并查看其内容。
  • 使用response变量来访问最近下载的网页的响应对象,您可以查看它的状态码、头部信息等。
  • 使用view(response)命令来在浏览器中打开最近下载的网页,以便更方便地查看其结构和样式。
  • 使用sel = Selector(response)命令来创建一个Scrapy选择器对象,您可以使用该对象来提取网页中的数据。
  • 使用sel.xpath()sel.css()方法来编写XPath或CSS选择器来定位和提取特定元素或数据。
  • 使用Python代码编写自定义的数据提取逻辑,并使用Scrapy提供的各种工具和方法来处理和保存数据。

注意

当从命令行运行Scrapy Shell时,记住总是用引号括住url,否则url包含参数(即 & 字符)不起作用。

在Windows上,使用双引号:

scrapy shell "https://scrapy.org"

保存数据到文件 

 想要保存数据到文件中,这里我们讲三种方法:

方法一

使用python原生方式保存

这是python原始的保存数据的方法。 

with open("movie.txt", 'wb') as f:
  for n, c in zip(movie_name, movie_core):
    str = n+":"+c+"\n"
    f.write(str.encode())

方法二 

使用Scrapy内置方式

scrapy 内置主要有四种:JSON,JSON lines,CSV,XML

最常用的导出结果格为JSON,命令如下:

scrapy crawl dmoz -o douban.json -t json 

参数设置:

  • -o 后面导出文件名

  • -t 后面导出的类型

    可以省略,但要保存的文件名后缀,写清楚类型

将数据解析完,返回数据,才可以用命令保存,代码如下,格式为dict或item类型

  • return data
  • yield data

方法三 

Item Pipeline的使用

数据在Spider中被收集之后,可以传递Item Pipeline中统一进行处理

  • 在Scrapy项目中的pipelines.py文件中定义一个自定义的管道类,该类需要继承scrapy.pipelines.Pipeline
  • 在管道类中实现process_item方法,该方法会在每个数据项(Item)被爬虫处理时被调用。
  • process_item方法中,您可以将数据写入文件,可以使用内置的Python文件操作函数(如open()write())或其他第三方库来实现数据的写入。

每个item pipeline就是一个普通的python类,包含的方法名如下:

方法名含义是否必须实现
process_item(self,item,spider)用于处理接收到的item
open_spider(self,spider)表示当spider被开启的时候调用这个方法
close_spider(self,spider)当spider关闭时候这个方法被调用

功能

  1. 接收item

    process_item方法中保存

  2. 是否要保存数据

    取决于是否编写代码用于保存数据

  3. 决定此Item是否进入下一个pipeline

    • return item 数据进入下一个pipeline
    • drop item 抛弃数据

示例

# pipelines.py

class MyPipeline(object):
    def __init__(self):
        self.file = open('data.txt', 'w')  # 打开文件以写入数据

    def process_item(self, item, spider):
        data = item['data']  # 假设数据项中的键为'data'
        self.file.write(data + '\n')  # 写入数据到文件
        return item

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

要启用这个自定义的管道,您需要在Scrapy项目的设置文件(settings.py)中进行配置:

# settings.py

ITEM_PIPELINES = {
    'yourproject.pipelines.MyPipeline': 300,  # 将自定义管道添加到管道设置中
}

在上面的配置中,300表示管道的优先级,数字越小表示优先级越高。 

 

 

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

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

相关文章

数学建模-数据的处理

MATLAB数学建模方法与实践(第3版)——读书笔记 数据的准备数据获取数据处理缺失值处理噪音过滤数据集成数据归约数据变换标准化离散化 数据统计基本描述性统计分布描述性统计 数据可视化数据降维主成分分析(PCA)相关系数降维 数据…

K8S 使用(1)- 基本命令

根据上文完成部署k8s后,我们需要了解如何使用k8s.首先我们需要了解如何使用K8S的一些基础命令及主要概念。 尚不清楚如何部署的请参考:单master部署简要步骤 如果您熟悉了k8s基本命令,可以跳过此章节。 目录 先看一下这张图 2. 节点 nod…

2.2、IOC容器的实现流程

​一、类图 二、容器的实现接口 Spring容器并不是只有一个。Spring自带多个容器实现,可以归位两种不同的类型。 (1)Bean工厂(由org.springframework.beans.factory.BeanFactory接口定义)是简单的容器实现工厂&#x…

数学内容的概述

前言 作为一名文科生,学习编程最大的阻碍莫过于数学知识。 学习数学的必要性 跟开发APP和后台服务器相比,机器学习、深度学习需要大量的数学知识。 数据处理和清洗:数据分析涉及大量的数据处理和清洗工作,需要掌握基本的数学概…

linux系统LAMP架构

文章目录 一、LAMP简介与概述二、LAMP各组件主要作用1.构建LAMP平台顺序 三、编译安装Apache httpd服务1.将所需软件安装包下载到/opt目录下解压2.移动两个文件并改名3.安装依赖环境4.编译安装5.做软连接,使文件可执行6.优化配置文件路径,并把httpd服务的…

《面试1v1》Redis主从架构

🍅 作者简介:王哥,CSDN2022博客总榜Top100🏆、博客专家💪 🍅 技术交流:定期更新Java硬核干货,不定期送书活动 🍅 王哥多年工作总结:Java学习路线总结&#xf…

crossover虚拟机软件好用吗?22.1.1版本有哪些优点

苹果系统虽然安全稳定,但有些应用程序并不提供苹果系统的安装包,使用双系统或在苹果电脑安装虚拟机可以帮我们提升设备使用效率,除了这两种解决方案外,还可以使用类虚拟机软件crossover,crossover mac的优点在于不会占…

使用HTTP/2实现服务端主动推送消息给客户端

77. 使用HTTP/2实现服务端主动推送消息给客户端 HTTP/2协议的服务器主动推送机制是通过服务器在接收到客户端请求后,主动向客户端推送相关资源的方式来实现的。下面将详细解释如何在服务器端和客户端实现HTTP/2的服务器主动推送,并给出相应的代码示例。…

华为OD机试真题(Java),素数伴侣(100%通过+复盘思路)

一、题目描述 若两个正整数的和为素数,则这两个正整数称之为“素数伴侣”,如2和5、6和13,它们能应用于通信加密。现在密码学会请你设计一个程序,从已有的 N ( N 为偶数)个正整数中挑选出若干对组成“素数伴…

老鸟是这样实现springboot日志打印的~

文章目录 前言一、实现一个全局日志打印二、使用步骤1. 新增一个自定义注解2. 拦截注解,并实现相应的打印日志功能3. 使用 总结 前言 项目中有时候为了与前端,与后端(微服务/远程调用http) 等撕逼,我们不得不做好应对措施,最终的就是打印清晰我们的入参出参日志,这为以后撕逼,…

Nik Silver Efex 黑白胶片效果滤镜

Nik Silver Efex 为获得优质黑白效果而精心设计算法,是世界领先级的黑白胶片滤镜集。 内置 64 个黑白(包括单色、双色等)预设供选择,主要分为经典 Classic、现代 Modern、复古 Vintage、阿弗格 En Vogue等四大风格,另外…

银行数字化转型导师坚鹏:兴业银行《天才与算法》读书拆解培训

兴业银行杭州分行《天才与算法》读书拆解培训圆满结束 兴业银行股份有限公司(简称“兴业银行”)成立于1988年8月,2022年总资产9.27万亿元,是经国务院、中国人民银行批准成立的首批股份制商业银行之一,总行设在福州市。…

【MySQL 高级(进阶)SQL 语句】

目录 一、命令操作1、select ----显示表格中一个或数个字段的所有数据记录2、select 指定字段的显示顺序3、select distinct 不显示重复的数据记录4、where 有条件的查询5、and和or 命令 ---- 且和或6、in 显示已知的值的数据记录7、between 显示两个值范围内的数据记录8、通配…

最短路径算法(Python数学建模)

0. 前言 最短路径算法是一种用于计算图中两个节点之间最短路径的算法。在图论中,最短路径通常指的是图中连接两个节点的路径中具有最小权重(或成本)的路径。 以下是两种常见的最短路径算法: Dijkstra算法:Dijkstra算…

Python对csv文件一键多值保存为json本地文件再读取加速效率(3)

最近发现做办公自动化表格匹配的时候还是csv格式的文件最快、效率是最高的 今天接到一个需求就是大致内容之这样的 1、给我一张表格直邮一列A列,内容是运单号 2、需要用相同的单号去另外一张表格匹配数据 3、其实就是Excel中的常见的vlookup 但是想要匹配的表格有几…

D351周赛复盘:美丽下标对数目(互质/数学运算)+数组划分若干子数组

文章目录 6466.美丽下标对数目思路互质的含义 python写法cpp写法 6910. 将数组划分成若干好子数组的方式思路完整版ans (ans * (ls[i 1] - ls[i]))含义重要问题1:为什么ls[i 1] - ls[i]能代表所有这两个1划分出来的子数组?重要问题2:为什么…

java 版本企业招标投标管理系统源码,多个行业+及时准确+全程电子化

计算机与网络技术的不断发展,推动了社会各行业信息化的步伐。时至今日,电子政务、电子商务已经非常普及,云计算、大数据、工业4.0、“互联网”等发展理念也逐步深入人心,如何将传统行业与互联网科技有效结合起来,产生1…

谷歌浏览器无法翻译成中文,谷歌翻译,最新(沉浸式翻译和划词翻译,chrome无法翻译,谷歌浏览器无法翻译此网页)

简介:谷歌浏览器自带的翻译功能,对我们来说用处很大,但有的时候突然就会变成“无法翻译此网页”,之前给大家提供过两种无法翻译此网页的解决方案,这次再给大家分享下两款别的翻译方法; 一、上次介绍&#x…

如何用ChatGPT使开发效率提高50%以上?

简介 ChatGPT是一个大型语言模型,由OpenAI开发。它被训练用于进行对话式交互,能够理解和生成自然语言文本。ChatGPT可以用于多种任务和场景,包括但不限于:智能助手、创意生成、语言学习、编程辅助等。ChatGPT的优势在于它的广泛知…

搭建个人音乐库-navidrome

文章目录 前言navidrome 服务搭建准备音乐材料客户端 前言 搭建个人音乐库。好玩而已。 没有做过多的筛选。在navidrome 和 koel 之间,选择了navidrome来搭建音乐库。 主要分为这几个步骤: 在服务器上搭建navidrome服务(web端)。准备音乐材料。手机上…