当前位置: 首页 > news >正文

scrapy pipelines

1.时间的处理

获取当前时间的字符串

# 创建一个datetime对象并设置为当前时间,该时间少8小时
dt = datetime.datetime.now()
# 将datetime转换为本地时区
local_tz = pytz.timezone('Asia/Shanghai')
local_dt = local_tz.localize(dt)
# 将datetime对象格式化为ISO 8601格式的字符串
iso_date_string = local_dt.isoformat()
# 从字符串中删除'T'分隔符
date_string = iso_date_string.replace('T', ' ')
# 从字符串中删除'.091979+08:00'毫秒和时区信息
date_string = date_string.split('.')[0]

将 datetime 对象 datetime.datetime(2023, 5, 24, 14, 18, 20, 91979) 转换为字符串 '2023-05-24T14:18:20.091979'

# 创建一个datetime对象并设置为当前时间,该时间少8小时
dt = datetime.datetime.now()
# 将datetime转换为本地时区
local_tz = pytz.timezone('Asia/Shanghai')
local_dt = local_tz.localize(dt)
# 将datetime对象格式化为ISO 8601格式的字符串
iso_date_string = local_dt.isoformat()
# 从字符串中删除'T'分隔符
date_string = iso_date_string.replace('T', ' ')
# 从字符串中删除'.091979+08:00'毫秒和时区信息
date_string = date_string.split('.')[0]

 2.获取scrapy爬虫结束后的统计信息

在pipelines文件的类,添加一下代码

# 1.在settings 启用统计信息中间件 STATS_CLASS = 'scrapy.statscollectors.MemoryStatsCollector'
# 2.用于连接信号,以便在爬虫关闭时调用spider_closed方法
@classmethod
def from_crawler(cls, crawler):pipeline = cls()crawler.signals.connect(pipeline.spider_closed, signal=scrapy.signals.spider_closed)return pipeline# 3.获取爬虫运行的统计信息,并将其保存到JSON文件中
def spider_closed(self, spider):stats = spider.crawler.stats.get_stats()with open('./log/stats.json', 'w') as f:json.dump(stats, f)

注:close_spider方法和spider_closed方法是 Scrapy框架中表示爬虫结束的两种方法,它们有以下区别:

close_spider方法:

在爬虫完成数据抓取后调用,可以用于执行一些清理操作,例如关闭数据库连接或写入总结性数据等。此方法可以由用户手动调用,也可以在 Scrapy 引擎检测到爬虫结束时自动调用。

spider_closed方法:

当爬虫关闭时被 Scrapy 引擎自动调用,比close_spider更适合做资源释放或其他清理工作。

因此,close_spider方法和spider_closed方法在实现上可以相似,但它们基于两个不同的场景,需要根据具体情况使用。

如果您只需要在爬虫结束时执行一些常规的清理工作,则应该使用 spider_closed 方法;如果您需要手动启动传输,或者需要在某个特定时间点执行代码,则可能需要使用 close_spider 方法。

3.数据保存前、后操作

数据保存到redis前,在__init__方法 初始化redis对象,删除redis已经存在的旧数据;

数据保存到redis后,在爬虫结束方法退出driver,否则下次再跑就会报502超时链接不到docker selenium的driver,因为docker的driver的进程没有释放。

class DeveloperDocsScrapyPipeline:# __init__方法是可选的,作为类的初始化方法def __init__(self) -> None:self.redis_items_key = "developer-docs:link-data:items"self._redis = operate_redis()self._redis.del_redis_key(self.redis_items_key)def spider_closed(self, spider):driver.close()# 需要退出,否则,docker的进程不退出,下次执行会超时driver.quit()

http://www.lryc.cn/news/286848.html

相关文章:

  • element-ui 打包流程源码解析——babel 相关
  • 听神经瘤的听力学表现
  • C#用DateTime.Now静态属性返回日期的星期信息
  • ARMv8-AArch64 的异常处理模型详解之异常类型 Exception types
  • Linux操作系统概念
  • Speech | 人工智能中关于语音务必需要了解的基础知识(信号处理)及代码
  • c# 单例模式实现
  • 万字长文详解Java线程池面试题
  • 【jQuery入门】链式编程、修改css、类操作和className的区别
  • 使用的uview 微信高版本 头像昵称填写能力
  • Hadoop3完全分布式搭建
  • 中断——外部中断EXIT
  • Kafka-服务端-副本机制
  • 银行数据仓库体系实践(4)--数据抽取和加载
  • 云计算入门——Linux 命令行入门
  • 自然语言处理(NLP)的发展
  • 让uniapp小程序支持多色图标icon:iconfont-tools-cli
  • 丹麦公司注册优势 丹麦公司注册条件 丹麦公司注册注意事项
  • C++PythonC# 三语言OpenCV从零开发(4):视频流读取
  • vue element MessageBox.prompt this.$prompt组件禁止显示右上角关闭按钮,取消按钮,及点击遮罩层关闭
  • Oracle 日常健康脚本
  • leetcode670最大交换
  • XML 注入漏洞原理以及修复方法
  • x-cmd pkg | dasel - JSON、YAML、TOML、XML、CSV 数据的查询和修改工具
  • Oracle 19c RAC集群管理 ---------关键参数以及常用命令
  • 时限挑战——深度解析Pytest插件 pytest-timeout
  • Java入门篇:打造你的Java开发环境——从零开始配置IDEA与Eclipse
  • 文本批量处理大师:简化文本处理,释放无限生产力!
  • Go 方法
  • 深度学习与大数据在自然语言处理中的应用与进展