首頁 >後端開發 >Python教學 >Scrapy自備爬蟲模板的資料抓取應用

Scrapy自備爬蟲模板的資料抓取應用

WBOY
WBOY原創
2023-06-22 09:24:06828瀏覽

隨著網路科技的不斷發展,爬蟲技術也得到了廣泛的應用。爬蟲技術能夠自動化地抓取網路上的數據,並將其儲存在資料庫中,為數據分析和資料探勘提供了便利。 Scrapy作為Python中非常著名的爬蟲框架,自帶了一些通用的爬蟲模板,可以快速爬取目標網站上的數據,並自動保存到本地或雲端資料庫中。本文將介紹如何使用Scrapy自備的爬蟲模板進行資料抓取,以及如何在抓取過程中進行資料清洗、解析和儲存。

一、Scrapy爬蟲模板介紹

Scrapy自帶了一些爬蟲模板,包括基礎的Spider模板、CrawlSpider模板和XmlFeedSpider模板等。 Spider模板是最基本的爬蟲模板,優點在於適用範圍廣,容易上手。 CrawlSpider模板則是一種基於規則的爬蟲模板,可以快速爬取多級別鏈接,並支援自訂規則。 XmlFeedSpider範本則是適用於XML格式的爬蟲範本。使用這些模板進行資料抓取,可以大幅降低程式設計師的開發難度,並且能夠提高爬取效率。

二、Scrapy爬蟲模板應用

下面以一個實際的例子來說明如何使用Scrapy自帶的Spider模板進行資料抓取。我們將要爬取的目標網站是一個電影資訊網站,網站首頁上列出了最新的電影資訊。我們需要從這個網站上爬取電影的名稱、導演、演員、評分等信息,並將其保存到本地資料庫中。

  1. 建立Scrapy工程

首先,需要打開命令列窗口,切換到目標工作目錄下,然後輸入以下命令:

scrapy startproject movies

這個命令將會建立一個名為movies的Scrapy工程,在工程目錄下,會包含一個名為spiders的子目錄,該目錄用於放置爬蟲程式。

  1. 建立Spider範本

在工程目錄下,使用下列指令來建立一個名為movie_spider的Spider:

scrapy genspider movie_spider www.movies.com

這個指令將會自動產生一個基於Spider模板的程序,其中www.movi​​es.com代表目標網站的網域名稱。在spiders目錄下,會出現一個名為movie_spider.py的文件,其內容如下:

import scrapy

class MovieSpider(scrapy.Spider):
    name = 'movie_spider'
    allowed_domains = ['www.movies.com']
    start_urls = ['http://www.movies.com/']

    def parse(self, response):
        pass

這是一個最基本的Spider程式。其中name表示爬蟲名稱,allowed_domains表示允許爬取的網域列表,start_urls表示起始爬取網址列表。在parse方法中,我們需要編寫資料解析和抓取的程式碼。

  1. 資料抓取與解析

我們需要編寫程式碼從response物件中抓取和解析目標網站的資料。對於剛才提到的電影資訊網站,我們可以使用XPath或CSS選擇器來定位頁面中的元素。假設電影名稱保存在頁面中的一個class為movie-name的div元素中,那麼我們可以使用下面的程式碼來提取所有的電影名稱:

def parse(self, response):
    movies = response.xpath('//div[@class="movie-name"]/text()').extract()
    for movie in movies:
        yield {'name': movie}

這裡,我們使用了XPath的語法來定位所有class為movie-name的div元素,並使用extract方法來提取元素中的文字內容。接著,我們使用for迴圈將每個電影名稱yield出來,作為生成器的輸出。

類似地,我們可以透過XPath或CSS選擇器來定位其他我們感興趣的元素。例如,導演和演員資訊可能會保存在class為director的div元素中,評分資訊可能會保存在class為rate的div元素中。

  1. 資料儲存

在Spider程式中,我們需要編寫程式碼將抓取到的資料儲存到本機或雲端資料庫。 Scrapy支援將資料保存到多種不同的資料庫中,包括MySQL、PostgreSQL、MongoDB等。

例如,我們可以使用MySQL資料庫來保存電影資訊。在spiders目錄下,我們可以建立一個名為mysql_pipeline.py的文件,其中包含以下程式碼:

import pymysql

class MysqlPipeline(object):
    def __init__(self):
        self.conn = pymysql.connect(host='localhost', user='root', passwd='123456', db='movie_db', charset='utf8')

    def process_item(self, item, spider):
        cursor = self.conn.cursor()
        sql = "INSERT INTO movie(name, director, actors, rate) VALUES(%s, %s, %s, %s)"
        cursor.execute(sql, (item['name'], item['director'], item['actors'], item['rate']))
        self.conn.commit()

    def __del__(self):
        self.conn.close()

該程式將實作資料儲存到MySQL資料庫中,其中movie_db是資料庫名稱,movie表將包含name、director、actors、rate四個字段,用於保存電影名稱、導演、演員和評分資訊。 process_item方法用於將Spider程式中產生的item儲存到資料庫中。

為了使用mysql_pipeline.py文件,我們還需要在settings.py文件中添加以下配置:

ITEM_PIPELINES = {
    'movies.spiders.mysql_pipeline.MysqlPipeline': 300
}

這裡,'movies.spiders.mysql_pipeline.MysqlPipeline'指定了mysql_pipeline.py文件的位置和類別名稱。數字300表示資料處理的優先級,數字越小優先級越高。

  1. 執行Scrapy程式

在spiders目錄下,執行下列指令即可執行Scrapy程式:

scrapy crawl movie_spider

這個指令將會啟動名為movie_spider的爬蟲程序,開始抓取目標網站的資料並儲存到MySQL資料庫中。

三、總結

本文介紹如何使用Scrapy自備的爬蟲範本進行資料擷取,包括Spider範本、CrawlSpider範本和XmlFeedSpider範本。我們以一個實際的範例為例,說明如何使用Spider模板進行資料抓取和解析,並將結果儲存到MySQL資料庫中。使用Scrapy進行資料抓取,可以大幅提高資料收集的效率和質量,並為後續的資料分析、資料探勘等工作提供強大的支援。

以上是Scrapy自備爬蟲模板的資料抓取應用的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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