首頁 後端開發 Python教學 Scrapy框架與資料庫整合:如何實現動態資料儲存?

Scrapy框架與資料庫整合:如何實現動態資料儲存?

Jun 22, 2023 am 10:35 AM
資料庫 scrapy 動態數據

隨著網路資料量的不斷增加,如何快速、準確地爬取、處理、儲存資料成為了網路應用開發的關鍵問題。而Scrapy框架作為一個高效的爬蟲框架,以其靈活、高速的爬取方式被廣泛應用於各種資料爬取場景。

然而,僅僅將爬取到的資料保存到檔案中,無法滿足大部分應用程式的需要。因為在目前的應用程式中,大多數的資料都是透過資料庫來儲存、檢索和操作。因此,如何將Scrapy框架與資料庫整合,而實現資料的快速動態儲存就成了新的挑戰。

本文將結合實際案例,介紹Scrapy框架如何進行資料庫整合,並實現動態資料存儲,供有需要的讀者參考。

一、前準備

在開始介紹前,本文預設讀者已經了解Python語言的基礎知識以及Scrapy框架的部分使用方法,同時能夠應用Python語言進行簡單的資料庫操作。如果您對此還不熟悉,那麼建議先去學習相關知識,再來進行閱讀本文。

二、選擇資料庫

在開始Scrapy框架與資料庫整合之前,我們需要先選擇一個合適的資料庫,來儲存我們抓取到的資料。目前常用的資料庫有MySQL、PostgreSQL、MongoDB等多種選擇。

這些資料庫各有優缺點,依照自己的需求進行選擇。例如,在資料量較小的情況下,使用MySQL資料庫會更為方便,而在需要海量資料儲存的情況下,MongoDB的文檔型資料庫更適合。

三、設定資料庫連線資訊

在具體操作之前,我們需要先把資料庫連線資訊配置好。例如,以MySQL資料庫為例,可以使用Python中的pymysql函式庫進行連線。

在Scrapy中,我們通常在settings.py中進行設定:

MYSQL_HOST = 'localhost'
MYSQL_PORT = 3306
MYSQL_USER = 'root'
MYSQL_PASSWORD = '123456'
MYSQL_DBNAME = 'scrapy_demo'
登入後複製

在上面的設定中,我們設定了MySQL資料庫所在的主機名稱、連接埠號碼、使用者名稱、密碼和資料庫名稱,這些資訊均需要根據實際情況進行修改。

四、寫資料儲存Pipeline

在Scrapy中,資料儲存Pipeline是實現資料儲存的關鍵。我們需要編寫一個Pipeline類,然後在Scrapy設定檔中進行設置,以實現資料的儲存。

以儲存到MySQL為例,我們可以寫一個MySQLPipeline類,如下所示:

import pymysql

class MySQLPipeline(object):

    def open_spider(self, spider):
        self.conn = pymysql.connect(host=spider.settings.get('MYSQL_HOST'),
                                    port=spider.settings.get('MYSQL_PORT'),
                                    user=spider.settings.get('MYSQL_USER'),
                                    password=spider.settings.get('MYSQL_PASSWORD'),
                                    db=spider.settings.get('MYSQL_DBNAME'))
        self.cur = self.conn.cursor()

    def close_spider(self, spider):
        self.conn.close()

    def process_item(self, item, spider):
        sql = 'INSERT INTO articles(title, url, content) VALUES(%s, %s, %s)'
        self.cur.execute(sql, (item['title'], item['url'], item['content']))
        self.conn.commit()

        return item
登入後複製

在上述程式碼中,我們定義了一個MySQLPipeline類,實作了對接MySQL資料庫,並定義了open_spider、close_spider和process_item三個方法。

其中,open_spider方法在整個爬蟲開始運行時調用,用來初始化資料庫連接;close_spider方法在爬蟲運行結束時調用,用來關閉資料庫連接。而process_item就是每次爬取到資料後呼叫的方法,用來將資料儲存到資料庫中。

五、啟用Pipeline

在完成了Pipeline的編寫後,我們還需要在Scrapy的設定檔settings.py中啟用它。只需要將Pipeline類別加入ITEM_PIPELINES變數即可,如下所示:

ITEM_PIPELINES = {
    'myproject.pipelines.MySQLPipeline': 300,
}
登入後複製

在上述程式碼中,我們將MySQLPipeline類別新增至了ITEM_PIPELINES變數中,設定了優先權為300,表示在處理Item時,該Pipeline類別會是第三個被呼叫的。

六、測試與運行

在完成了所有的配置後,我們可以運行Scrapy爬蟲,將抓取到的資料儲存到MySQL資料庫中。具體的步驟和指令如下:

1.進入Scrapy專案所在目錄,執行下列指令建立Scrapy專案:

scrapy startproject myproject
登入後複製

2.建立一個Spider,用來測試Scrapy框架的資料儲存功能,並將爬取到的資料儲存到資料庫中。在myproject目錄中執行以下指令:

scrapy genspider test_spider baidu.com
登入後複製

上述指令將產生一個名為test_spider的Spider,對百度進行爬取。

3.寫Spider程式碼,在test_sprider目錄的spiders目錄下,開啟test_sprider.py,寫爬蟲程式碼:

import scrapy
from myproject.items import ArticleItem

class TestSpider(scrapy.Spider):
    name = "test"
    allowed_domains = ["baidu.com"]
    start_urls = [
        "https://www.baidu.com",
    ]

    def parse(self, response):
        item = ArticleItem()
        item['title'] = 'MySQL Pipeline测试'
        item['url'] = response.url
        item['content'] = 'Scrapy框架与MySQL数据库整合测试'
        yield item
登入後複製

以上程式碼中,我們定義了一個TestSpider類,繼承自Scrapy自帶的Spider類,用來處理爬蟲邏輯。在parse方法中,我們建構了一個Item對象,並對其中的'content'、'url'和'title'三個關鍵字進行了設定。

4.在myproject目錄下建立一個items文件,用於定義資料模型:

import scrapy

class ArticleItem(scrapy.Item):
    title = scrapy.Field()
    url = scrapy.Field()
    content = scrapy.Field()
登入後複製

在上述程式碼中,我們定義了一個ArticleItem類,用來保存爬取到的文章數據。

5.測試程式碼:

在test_spider目錄下,執行以下指令來測試你的程式碼:

scrapy crawl test
登入後複製

在執行上述指令後,Scrapy將會啟動TestSpider爬蟲,並將從百度主頁抓取到的資料儲存在MySQL資料庫中。

七、總結

本文簡單介紹了Scrapy框架如何與資料庫整合,並實現了動態資料儲存。希望本文能幫助到有需要的讀者,同時也希望讀者能根據自己的實際需求進行開發,實現更有效率、更快速的資料動態儲存功能。

以上是Scrapy框架與資料庫整合:如何實現動態資料儲存?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1665
14
CakePHP 教程
1423
52
Laravel 教程
1321
25
PHP教程
1269
29
C# 教程
1249
24
iOS 18 新增「已復原」相簿功能 可找回遺失或損壞的照片 iOS 18 新增「已復原」相簿功能 可找回遺失或損壞的照片 Jul 18, 2024 am 05:48 AM

蘋果公司最新發布的iOS18、iPadOS18以及macOSSequoia系統為Photos應用程式增添了一項重要功能,旨在幫助用戶輕鬆恢復因各種原因遺失或損壞的照片和影片。這項新功能在Photos應用的"工具"部分引入了一個名為"已恢復"的相冊,當用戶設備中存在未納入其照片庫的圖片或影片時,該相冊將自動顯示。 "已恢復"相簿的出現為因資料庫損壞、相機應用未正確保存至照片庫或第三方應用管理照片庫時照片和視頻丟失提供了解決方案。使用者只需簡單幾步

Hibernate 如何實作多型映射? Hibernate 如何實作多型映射? Apr 17, 2024 pm 12:09 PM

Hibernate多態映射可映射繼承類別到資料庫,提供以下映射類型:joined-subclass:為子類別建立單獨表,包含父類別所有欄位。 table-per-class:為子類別建立單獨資料表,僅包含子類別特有列。 union-subclass:類似joined-subclass,但父類別表聯合所有子類別列。

如何在PHP中處理資料庫連線錯誤 如何在PHP中處理資料庫連線錯誤 Jun 05, 2024 pm 02:16 PM

PHP處理資料庫連線報錯,可以使用下列步驟:使用mysqli_connect_errno()取得錯誤代碼。使用mysqli_connect_error()取得錯誤訊息。透過擷取並記錄這些錯誤訊息,可以輕鬆識別並解決資料庫連接問題,確保應用程式的順暢運作。

在PHP中使用MySQLi建立資料庫連線的詳盡教學 在PHP中使用MySQLi建立資料庫連線的詳盡教學 Jun 04, 2024 pm 01:42 PM

如何在PHP中使用MySQLi建立資料庫連線:包含MySQLi擴充(require_once)建立連線函數(functionconnect_to_db)呼叫連線函數($conn=connect_to_db())執行查詢($result=$conn->query())關閉連線( $conn->close())

如何在 Golang 中使用資料庫回呼函數? 如何在 Golang 中使用資料庫回呼函數? Jun 03, 2024 pm 02:20 PM

在Golang中使用資料庫回呼函數可以實現:在指定資料庫操作完成後執行自訂程式碼。透過單獨的函數新增自訂行為,無需編寫額外程式碼。回調函數可用於插入、更新、刪除和查詢操作。必須使用sql.Exec、sql.QueryRow或sql.Query函數才能使用回呼函數。

如何在 Golang 中將 JSON 資料保存到資料庫中? 如何在 Golang 中將 JSON 資料保存到資料庫中? Jun 06, 2024 am 11:24 AM

可以透過使用gjson函式庫或json.Unmarshal函數將JSON資料儲存到MySQL資料庫中。 gjson函式庫提供了方便的方法來解析JSON字段,而json.Unmarshal函數需要一個目標類型指標來解組JSON資料。這兩種方法都需要準備SQL語句和執行插入操作來將資料持久化到資料庫中。

PHP與不同資料庫的連接:MySQL、PostgreSQL、Oracle和更多 PHP與不同資料庫的連接:MySQL、PostgreSQL、Oracle和更多 Jun 01, 2024 pm 03:02 PM

PHP連接資料庫指南:MySQL:安裝MySQLi擴展,建立連線(servername、username、password、dbname)。 PostgreSQL:安裝PgSQL擴展,建立連線(host、dbname、user、password)。 Oracle:安裝OracleOCI8擴展,建立連線(servername、username、password)。實戰案例:取得MySQL資料、PostgreSQL查詢、OracleOCI8更新記錄。

如何使用C++處理資料庫連線和操作? 如何使用C++處理資料庫連線和操作? Jun 01, 2024 pm 07:24 PM

在C++中使用DataAccessObjects(DAO)函式庫連接和操作資料庫,包括建立資料庫連線、執行SQL查詢、插入新記錄和更新現有記錄。具體步驟為:1.包含必要的函式庫語句;2.開啟資料庫檔案;3.建立Recordset物件執行SQL查詢或操作資料;4.遍歷結果或依照特定需求更新記錄。

See all articles