爬蟲學習——Item封裝數據與Item Pipeline處理數據

一、Item封裝數據

對于有字段的數據,最好的數據結構維護方法為字典類型(dict),但是由于字典不便于攜帶元數據和傳遞給其他組件使用,故可以使用Item類封裝爬取到的數據。

這里涉及兩個類:Item基類和Field類

兩者的使用關系如下:首先創建一個自定義的Item類,命名為BestItem()該類繼承于Item類,然后使用Field()來對各字段進行創建對象,即cost=Field()

即總的使用格式為:

From scrapy import Item,FieldClass BestItem():Cost=Field()Information=Field()

然后將創建好的BestItem導入創建爬蟲類的文件中進行使用,并對其進行專門的解析和提取。類和類之間可以互相進行繼承,實現功能字段的拓展:class VeryBestItem(BestItem)

二、Item Pipeline處理數據

一個Item Pipeline只負責一種功能的數據處理,但是可以使用多個,實現對多個功能的處理。類似流水線處理一樣。如果在某一個Item Pipeline處理時拋出異常,那么這個數據將不再傳遞給后面的Item Pipeline進行處理,也不會導出到文件中,而是直接被拋棄。

Item Pipeline處理的場景為:清洗數據、驗證數據的有效性、數據去重、將數據寫入特定的文件或數據庫、數據增強、數據聚合、數據脫敏/加密、數據單位換算、依賴外部API補充數據和錯誤恢復和機器學習模型等。

對該方法的使用很簡單:只需要專注于實現某一功能,而不需要在意是否需要繼承特定基類。

其在實際應用中必須實現的方法:
①open_spider(self,spider)用于在開始處理數據之前完成某些初始化的工作,比如連接數據庫

②close_spider(self,spider)用于在處理完所有數據之后完成某些清理工作,比如關閉數據庫連接。

③from_crawler(cls,crawler)用于根據crawler.settings讀取配置創建Item Pipeline對象。

④process_item(self ,item,spider)用于對數據進行處理。

如何想使用Item Pipeline這個組件(可選),需要在配置文件settings.py中進行配置。其配置為:ITEM_PIPELINES={“每一個Item Pipeline類的導入路徑,值為0~1000的數字,該數字的大小決定了Item Pipeline處理數據的先后次序,數字小的在前”}

重點:將爬取的數據可以直接存入數據庫MongoDB,使用Item Pipeline就可以完成這個任務。在使用MongoDB時,需要導入import pymongo

整體實現流程:

From scrapy.item import Item
Import pymongo
Class MongoDBpipeline(object):db_url=”mongodb://localhost:8888/” //數據庫的url地址db_name=”data_db”//數據庫名Def  open_spider(self,spider)://連接數據庫Self.client=pymongo.MongoClient(self.db_url)Self.db=self.client[self.db_name]Def  close_spider(self,spider)://關閉數據庫連接Self.client.close()Def  process_item(self,item,spider)://進行數據處理Collection=self.db[spider.name]Post=dict(item) if isinstance(item,Item) else itemCollection.insert_one(post)//insert_one傳入的必須為一個字典對象,不能是Item對象,故在此之前對其進行類型判斷Return item
------------------------------------------------------------------
更改配置文件settings.py:ITEM_PIPELINES={“MongoDBPipeline的路徑”:300
}
MongoDB_url=”mongodb://localhost:8888/”
Mongo_DB_name=”data_db”
--------------------------------------------------------------
更改另外一個配置文件crawler.settings:
Def  from_crawler(cls,crawler):Cls.db_url=crawler.settings.get(“MongoDB_url”,”mongodb://localhost:8888/”)Cls.db_name=crawler.settings.get(“Mongo_DB_name”,”data_db”)Return cls()

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/78250.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/78250.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/78250.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【React】狀態管理 Context API \ MobX \ Redux

Context APIMobXRedux React有自己狀態管理,周邊生態也有很多狀態管理 Context API 直接從react中引入并調用即可,context包含兩個東西: Provider:提供商(翻譯),提供數據;屬性&…

RK3588上編譯opencv 及基于c++實現圖像的讀入

參考博文: https://blog.csdn.net/qq_47432746/article/details/147203889 一、安裝依賴包 sudo apt install build-essential cmake git pkg-config libgtk-3-dev libavcodec-dev libavformat-dev libswscale-dev libv4l-dev libxvidcore-dev libx264-dev libjpe…

MATLAB 訓練CNN模型 yolo v4

學生對小車控制提出了更好的要求,能否加入深度學習模型。 考慮到小車用matlab來做,yolo v5及以上版本都需要在pytorch下訓練,還是用早期版本來演示。 1 yolov4 調用 參考 trainYOLOv4ObjectDetector (mathworks.com) name "tiny-yo…

Windows下使用 VS Code + g++ 開發 Qt GUI 項目的完整指南

🚀 使用 VS Code g 開發 Qt GUI 項目的完整指南(Windows MSYS2) 本指南幫助你在 Windows 下使用 VS Code g CMake Qt6 快速搭建 Qt GUI 項目,適合熟悉 Visual Studio 的開發者向跨平臺 VS Code 工具鏈遷移。 🛠?…

開源漏洞掃描器:OpenVAS

一、OpenVAS介紹 OpenVAS (Open Vulnerability Assessment System) 是一款功能強大的開源漏洞掃描器。它由 Greenbone Networks 開發和維護,是 Greenbone 安全管理器 (GSM) 產品的基礎,同時也有免費的社區版本(Greenbone Community Edition&…

Redis Pipeline 詳解

Redis Pipeline 詳解 Redis 無 Pipeline 耗時情況 : #mermaid-svg-8RIiJyeBO0uIrWjr {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-8RIiJyeBO0uIrWjr .error-icon{fill:#552222;}#mermaid-svg-8RIiJyeBO0uIrWjr .…

2025.04.24【3D】3D繪圖入門指南

Nifty graph A contribution by Matt Asher. 3D animation A 3D animated scatterplot made with R and rgl. 文章目錄 Nifty graph3D animation 2025.04.24【3D】| 3D繪圖入門指南什么是3D繪圖?為什么使用3D繪圖?如何在R中進行3D繪圖?安裝…

[特殊字符] 分布式事務中,@GlobalTransactional 與 @Transactional 到底怎么配合用?

在微服務架構中,隨著系統模塊的拆分,單體應用中的本地事務已經無法滿足跨服務的數據一致性需求。此時,我們就需要引入分布式事務解決方案,比如 Seata。在使用 Seata 的過程中,很多人會遇到一個常見的疑問: …

TDengine 集群高可用方案設計(二)

四、TDengine 集群高可用方案設計 4.1 硬件與網絡架構設計 服務器選型:選擇配置高、穩定性強的服務器,如戴爾 PowerEdge R740xd、華為 RH2288H V5 等。以戴爾 PowerEdge R740xd 為例,它配備英特爾至強可擴展處理器,具備高性能計…

從對數變換到深度框架:邏輯回歸與交叉熵的數學原理及PyTorch實戰

目錄 前言 一、連乘變連加二、最小化損失函數2.1交叉熵2.2 二分類交叉熵2.3 多分類交叉熵三、邏輯回歸與二分類3.1 邏輯回歸與二分類算法理論講解3.1.1 散點輸入3.1.2 前向計算3.1.3 Sigmoid函數引入3.1.4 參數初始化3.1.5 損失函數3.1.6 開始迭代3.1.7 梯度下降顯示四、基于框…

高企復審獎補!2025年合肥市高新技術企業重新認定獎勵補貼政策及申報條件

一、合肥市高新技術企業重新認定獎勵補貼政策 (一)高新區高新技術企業重新認定復審補貼獎勵 重新認定為國家高新技術企業的給予5萬元一次性獎勵。 (二)經開區高新技術企業重新認定復審補貼獎勵 對重新認定的企業,給…

Spring Boot 中配置線程池時優化 `ThreadPoolTaskExecutor` 的配置總結

在 Spring Boot 中配置線程池時,可以通過以下方式進一步優化 ThreadPoolTaskExecutor 的配置,提升性能、靈活性和可靠性: 優化點 1:合理設置線程池參數 關鍵參數調整 Bean(name "taskExecutor") public Executor tas…

opencv 圖像的旋轉

圖像的旋轉 1 單點旋轉2. 圖片旋轉(cv2.getRotationMatrix2D)3. 插值方法3.1 最近鄰插值(cv2.INTER_NEAREST)3.2 雙線性插值(cv2.INTER_LINEAR)3.3 像素區域插值(cv2.INTER_AREA)3.4 雙三次插值(cv2.INTER_CUBIC&#…

如何在 Odoo 18 中配置自動化動作

如何在 Odoo 18 中配置自動化動作 Odoo是一款多功能的業務管理平臺,旨在幫助各種規模的企業更高效地處理日常運營。憑借其涵蓋銷售、庫存、客戶關系管理(CRM)、會計和人力資源等領域的多樣化模塊,Odoo 簡化了業務流程&#xff0c…

每日兩道leetcode

345. 反轉字符串中的元音字母 - 力扣(LeetCode) 題目 給你一個字符串 s ,僅反轉字符串中的所有元音字母,并返回結果字符串。 元音字母包括 a、e、i、o、u,且可能以大小寫兩種形式出現不止一次。 示例 1:…

【SQL 基礎入門 1. -- SQL 基本語法詳解及舉例】

文章目錄 SQL 數據庫創建及使用刪除數據庫SQL 查看數據空中有哪些表格SQL 創建表格SQL 修改表格列數據格式SQL 表格插入數據SQL 查看表格類型組成SQL 查看表格中的內容 SQL 查詢語句SQL 查看指定列SQL 選擇指定列SQL 按指定列進行升序排序SQL 平均值/求和/最大值/最小值 SQL 數…

PostgreSQL 分區表——范圍分區SQL實踐

PostgreSQL 分區表——范圍分區SQL實踐 1、環境準備1-1、新增原始表1-2、執行腳本新增2400w行1-3、創建pg分區表-分區鍵為創建時間1-4、創建24年所有分區1-5、設置默認分區(兜底用)1-6、遷移數據1-7、創建分區表索引 2、SQL增刪改查測試2-1、查詢速度對比…

Apache Flink 深度解析:流處理引擎的核心原理與生產實踐指南

Apache Flink 深度解析:流處理引擎的核心原理與生產實踐指南 引言:實時計算的范式革命 2023年雙十一期間,某頭部電商平臺基于Flink構建的實時風控系統成功攔截了每秒超過120萬次的異常交易請求。這背后是Apache Flink作為第四代計算引擎的強…

【Java學習筆記】選擇結構

選擇結構 內容結構 一、順序結構 二、分支控制 (1)單分支 (2)雙分支 (3)多分支 (4)嵌套分支 (5)switch 分支結構 三、switch和if的比較 一、順序結構…

03_JavaScript

文章目錄 一、概述1.1、JavaScript簡介1.2、JavaScript組成部分1.3、為什么要學習JavaScript1.4、學習的目的1.5、JavaScript與Java的關系 二、使用位置及運行說明2.1、使用位置2.2、如何運行 三、JavaScript基礎語法3.1、變量3.2、運算符3.3、控制流程3.3.1、分支結構3.3.2、循…