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中文網其他相關文章!