首页 > 编程问答 >单个 Scrapy 项目与多个项目

单个 Scrapy 项目与多个项目

时间:2024-08-01 16:04:48浏览次数:11  
标签:python web-scraping scrapy

我对如何存储所有蜘蛛感到困惑。这些蜘蛛将通过使用命令行调用和从 stdin 读取的项目输入 Apache NiFi 来使用。我还计划让这些蜘蛛的子集在单独的网络服务器上使用 scrapyrt 返回单个项目结果。我需要在具有不同项目模型的许多不同项目中创建蜘蛛。它们都有相似的设置(比如使用相同的代理)。

我的问题是构建我的 scrapy 项目的最佳方法是什么?

  1. 将所有蜘蛛放在同一个存储库中。 提供一个为项目加载器和项目管道创建基类的简单方法。
  2. 将我正在处理的每个项目的蜘蛛分组到单独的存储库中。 这样做的优点是允许项目成为每个项目的焦点,而不会被太大了。无法共享通用代码、设置、蜘蛛监视器 (spidermon) 和基类。尽管存在一些重复,但这感觉是最干净的。
  3. 仅打包我计划在 NiFi 存储库中使用非实时的蜘蛛和另一个存储库中的实时蜘蛛。 有一个优势,我可以将蜘蛛与实际使用它们但仍然集中/复杂化哪些蜘蛛与哪些项目一起使用的项目。

感觉正确的答案是#2。与特定程序相关的蜘蛛应该在自己的 scrapy 项目中,就像当你为项目 A 创建 Web 服务时,你不会说哦,我可以将项目 B 的所有服务端点扔到同一个服务中,因为那是我的所有服务都将驻留在其中,即使某些设置可能会重复。可以说,一些共享代码/类可以通过单独的包共享。

您觉得怎么样?你们是如何构建 scrapy 项目以最大限度地提高可重用性的?同一项目与单独项目的界限在哪里?它基于您的项目模型或数据源吗?


提出了有关如何构建 Scrapy 项目的一些很好的观点。虽然没有一个正确的答案,并且很大程度上取决于的具体需求,但我同意的观点, 选项 2(按项目对蜘蛛进行分组到单独的存储库中) 通常是最好的方法。

让我们更深入地了解原因以及如何缓解缺点:

选项 2 的优势:

  • 模块化和组织性: 将蜘蛛与其各自的项目分组可以保持代码库的清洁、有条理和易于维护。当拥有许多蜘蛛时,这尤其重要。
  • 隔离: 不同的项目可能需要不同的依赖项、设置或 Spidermon 配置。单独的存储库可以防止版本冲突并允许对每个项目进行定制。
  • 所有权和责任感: 如果有不同的团队在不同的项目上工作,单独的存储库可以更轻松地管理代码所有权和责任感。

选项 2 的缺点:

  • 代码重复: 可能会在项目之间遇到一些重复的代码,尤其是在设置、基类和实用程序函数方面。
  • 共享代码的管理: 如果需要跨项目共享代码,则需要使用包管理器(如 pip)将其提取到单独的库中并进行管理。

缓解缺点:

  • 用于共享代码的共享库: 为设置、基类、项目管道、实用程序函数和 Spidermon 配置创建一个单独的 Python 包。所有项目都可以安装此包作为依赖项。
  • 使用 Cookiecutter 模板: 创建一个 Cookiecutter 模板,用于生成新的 Scrapy 项目,其中包含的标准设置、共享库和最佳实践。这可以减少设置新项目所需的工作量。
  • Monorepo,如果适用: 如果在存储库管理方面遇到困难,请考虑使用 monorepo。Monorepos 允许在单个存储库中拥有多个项目,从而更轻松地管理依赖项和共享代码,同时仍保持一些隔离度。

何时考虑其他选择:

  • 选项 1(所有蜘蛛都在一个存储库中): 如果的所有蜘蛛都密切相关且共享大量代码,这可能是一个不错的选择。但是,随着项目规模的扩大,保持代码库的有条理将变得越来越具有挑战性。
  • 选项 3(按实时与非实时进行分组): 这可能是一个有效的选项,但它更多地与蜘蛛的部署而不是它们的组织方式相关。仍然可以在每个部署组中拥有多个项目。

最终,最佳方法取决于的项目规模、团队结构和个人喜好。从选项 2 开始,如果需要,以后可以随时调整。请记住要优先考虑模块化、可重用性和长期可维护性。

标签:python,web-scraping,scrapy
From: 57861326

相关文章

  • 为什么Python库中还没有Gauss-Jordan消去函数?
    Gaussian-Jordan消除法是一种常用且方便的技术。在矩阵计算中,该方法得到广泛应用。但是,Python库中没有此方法的内置函数。设计这样的功能并不困难。开发人员似乎忽略了这个功能。这可能是什么原因?希望开发者能够重视这一点,并开发与该方法相关的功能。虽然高斯-约旦消元......
  • Python爬虫 - js逆向之扣出某平台的_signature加密字段
    前言好久没有做逆向案例分析了,最近都在看同行朋友写好的案例,感觉学到很多,算是取长补短了不多bb,机缘巧合下,拿到个目标网站分析首先抓个包,就看到请求参数里带着这几个参数主要就是_signature了,其他的参数都不重要得想必你一看就知道啥意思了。行,开始分析_signature......
  • python 音频处理(1)——重采样、音高提取
    采集数据->采样率调整使用torchaudio进行重采样(cpu版)首先导入相关包,既然使用torch作为我们的选项,安装torch环境我就不必多说了,如果你不想用torch可以使用后文提到的另一个库1importtorch2importtorchaudio3fromtorchaudio.transformsimportResample4fromtime......
  • 用于从连接到 LAN 交换机的四个 Arduino 扩展板读取/保存数据的 Python 代码
    我有四个Arduino扩展板连接到LAN交换机。每个人都会发出一条“HelloJane”消息。LAN交换机已连接到我的PC。我需要将每个Arduino的数据/消息保存在PC上的单独文件夹中。请帮助使用Python脚本/代码。我能够看到来自所有四个Arduino的消息,但无法将它们保存到文......
  • 使用 Python 生产者和消费者在 Kubernetes minikube 上设置 Kafka Kraft
    我正在尝试从kubernetes集群外部连接到kubernetesminikubekafkapod。服务器启动没有任何问题,但我无法设法将本地kafka生产者/消费者连接到外部kafkapod。在集群内的kafka服务器映像上,我将bootstrap-server设置为:bin/kafka-topics.sh--create--bootst......
  • python llama_index.indices.list.retrievers 导入错误
    fromllama_indeximportGPTListIndexfromllama_index.indices.list.retrieversimportListIndexLLMRetrieverdocuments=SimpleDirectoryReader('./data').load_data()index=GPTListIndex.from_documents(documents,service_context=service_context)r......
  • 如何使用 python 和 bs4 修复抓取 web 表输出 csv
    请帮帮我,,我想在“td”、“Barcode”和“namaproduk”中获取2个数据,但我得到的数据非常糟糕。我应该修复什么?importcsvimportrequestsfrombs4importBeautifulSoupoutfile=open("dataaa.csv","w",newline='')writer=csv.writer(outfile)page=0whilepag......
  • 基于Django的超市小程序+47822(免费领源码)可做计算机毕业设计JAVA、PHP、爬虫、APP、小
    基于django超市小程序摘 要随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,超市小程序被用户普遍使用,为方便用户能够可以随时进行超市小程序的数据信息管理,特开发了基于djan......
  • 【优秀python django系统案例】基于python的医院挂号管理系统,角色包括医生、患者、管
    随着信息技术的迅猛发展,传统的医院挂号管理方式面临着效率低下、排队时间长、信息不对称等诸多问题。这些问题不仅影响患者的就医体验,也加重了医院工作人员的负担。在此背景下,基于Python的医院挂号管理系统应运而生。该系统旨在通过信息化手段优化挂号流程,提高管理效率,提升医疗......
  • Python-PLAXIS自动化建模技术与典型岩土工程
    原文链接:Python-PLAXIS自动化建模技术与典型岩土工程https://blog.csdn.net/2301_78164062/article/details/140607885?spm=1001.2014.3001.5501一:Plaxis软件及PlaxisPythonAPI环境搭建1、Plaxis2D\Plaxis3D软件2、面向对象编程语言Python及其开发环境Spyder3、Plaxis输......