首頁  >  文章  >  後端開發  >  Scrapy爬蟲實戰:抓取貓眼電影排行榜數據

Scrapy爬蟲實戰:抓取貓眼電影排行榜數據

WBOY
WBOY原創
2023-06-22 08:58:552170瀏覽

Scrapy爬蟲實戰:抓取貓眼電影排行榜數據

隨著網路的發展,資料爬取成為了大數據時代的重要組成部分。在資料爬取的過程中,利用爬蟲技術能夠自動化地取得當下所需的數據,並進行處理與分析。近年來,Python成為了最受歡迎的程式語言之一,其中,Scrapy是一個基於Python的強大的爬蟲框架,其應用範圍廣泛,尤其在資料抓取領域受到了大家的關注。

本文即基於Scrapy框架來實現貓眼電影排行榜資料的爬取,具體流程分為四個部分:分析頁面結構、編寫爬蟲框架、解析頁面、儲存資料。

一、分析頁面結構

首先,我們需要對貓眼電影排行榜頁面的結構進行分析。為了方便操作,我們使用Google Chrome瀏覽器進行頁面分析,並使用XPath來擷取所需的資訊。

可以看到,貓眼電影排行榜頁麵包含了多個電影的訊息,每一個電影都有一個類似下圖中的HTML程式碼區塊。

我們的目標是從每個HTML程式碼區塊中取得電影的名稱、主演、上映時間、電影海報連結和評分五項資料。那麼我們可以在Google Chrome瀏覽器中按F12鍵開啟開發者工具,然後選擇"Elements"標籤頁,並將滑鼠移到我們需要抽取的目標元素上,右鍵點擊並選擇"Copy -> Copy XPath" 。

複製出來的XPath路徑如下:

/html/body/div[3]/div/div[2]/dl/dd[1]/div/div/div[1 ]/p[1]/a/text()

其中"/html/body/div[3]/div/div[2]/dl/dd"表示整個影片清單的父節點,依次往下,即可找到我們需要抽取的元素。

二、寫爬蟲框架

接下來,我們需要建立一個Scrapy項目,可參考Scrapy的官方文件(https://docs.scrapy.org/en/latest/intro/ tutorial.html)。建立好專案之後,在Spiders目錄下新建一個名為maoyan.py的檔案。

下面是我們的爬蟲框架程式碼:

import scrapy
from maoyan.items import MaoyanItem

class MaoyanSpider(scrapy.Spider):

name = 'maoyan'
allowed_domains = ['maoyan.com']
start_urls = ['http://maoyan.com/board/4']

def parse(self, response):
    movies = response.xpath('//dl[@class="board-wrapper"]/dd')
    for movie in movies:
        item = MaoyanItem()
        item['title'] = movie.xpath('.//p[@class="name"]/a/@title').extract_first()
        item['actors'] = movie.xpath('.//p[@class="star"]/text()').extract_first().strip()
        item['release_date'] = movie.xpath('.//p[@class="releasetime"]/text()').extract_first().strip()
        item['image_url'] = movie.xpath('.//img/@data-src').extract_first()
        item['score'] = movie.xpath('.//p[@class="score"]/i[@class="integer"]/text()').extract_first() + 
                        movie.xpath('.//p[@class="score"]/i[@class="fraction"]/text()').extract_first()
        yield item

在程式碼中,我們先定義了Spider的name、allowed_domains和start_urls。其中,「allowed_domains」表示只有屬於該網域下的URL才會被爬蟲存取和抽取內容。同時,「start_urls」表示爬蟲將請求的第一個URL位址。

Spider的parse方法接收來自response的內容,然後透過XPath路徑抽取了每個電影的名稱、主演、上映時間、電影海報連結和評分五項數據,保存到MaoyanItem中。

最後,我們透過yield關鍵字傳回了每個Item物件。注意:我們定義的Item物件是在一個名為items.py的檔案中,需要導入。

三、解析頁面

當爬蟲定位到我們需要抓取的頁面時,我們就可以開始解析HTML文檔,提取我們需要的資訊。這部分內容主要集中在Scrapy中response物件的XPath查詢和正規表示式處理。

在本例中,我們使用XPath路徑來抽取貓眼電影排行榜頁面中的每個影片的五項資料。

四、儲存資料

當資料被解析後,我們需要將其儲存起來。通常來說,我們將所得到的資料存在一個文件中或保存到一個資料庫中。

在本例中,我們選擇將資料儲存到一個.csv檔案中:

import csv

class MaoyanPipeline(object):

def __init__(self):
    self.file = open('maoyan_top100_movies.csv', 'w', newline='', encoding='utf-8')
    self.writer = csv.writer(self.file)

def process_item(self, item, spider):
    row = [item['title'], item['actors'], item['release_date'], item['image_url'], item['score']]
    self.writer.writerow(row)
    return item

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

在上面的程式碼中,我們使用了Python內部的csv模組將資料寫入到一個名為maoyan_top100_movies.csv的檔案中。當這個Spider關閉的時候,csv檔案也會關閉。

總結

透過本文,我們了解如何使用Scrapy框架來實現貓眼電影排行榜資料的爬取。首先我們分析了頁面結構,然後編寫了Scrapy框架來抓取資料、解析頁面和儲存資料。在實戰中我們可以從中學習如何在抓取資料中做到合法性、可用性及高效性的統一。

以上是Scrapy爬蟲實戰:抓取貓眼電影排行榜數據的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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