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

 

目录

 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表示管道的优先级,数字越小表示优先级越高。 

 

 

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我还可以熬_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值