首頁 後端開發 Python教學 Scrapy實戰:爬取豆瓣電影數據與評分熱度排名

Scrapy實戰:爬取豆瓣電影數據與評分熱度排名

Jun 22, 2023 pm 01:49 PM
豆瓣 爬取 scrapy

Scrapy是一個開源的Python框架,用於快速且有效率地爬取資料。在本文中,我們將使用Scrapy爬取豆瓣影片的數據和評分熱度排名。

  1. 準備工作

首先,我們需要安裝Scrapy。您可以在命令列中輸入以下命令來安裝Scrapy:

pip install scrapy
登入後複製

接下來,我們將建立一個Scrapy專案。在命令列中,輸入以下命令:

scrapy startproject doubanmovie
登入後複製

這將建立一個名為doubanmovie的Scrapy專案。然後,我們將進入專案目錄並建立一個名為douban.py的Spider。在命令列中,輸入以下命令:

cd doubanmovie
scrapy genspider douban douban.com
登入後複製

現在,我們已經有了一個可以使用的Spider。接下來,我們將定義Spider的行為以取得所需的資料。

  1. 爬取電影資料

我們將使用Spider來爬取豆瓣電影的資料。具體來說,我們將獲取以下資訊:

  • 電影名稱
  • 導演
  • #演員
  • 類型
  • 國家
  • 語言
  • 上映日期
  • 片長
  • 評分
  • #評價人數

開啟douban.py文件,我們將添加以下程式碼:

import scrapy

class DoubanSpider(scrapy.Spider):
    name = 'douban'
    allowed_domains = ['douban.com']
    start_urls = ['https://movie.douban.com/top250']

    def parse(self, response):
        movie_list = response.xpath('//div[@class="item"]')
        for movie in movie_list:
            yield {
                'name': movie.xpath('.//span[@class="title"]/text()').get(),
                'director': movie.xpath('.//div[@class="bd"]/p/text()[1]').get(),
                'actors': movie.xpath('.//div[@class="bd"]/p/text()[2]').get(),
                'genre': movie.xpath('.//div[@class="bd"]/p/text()[3]').get(),
                'country': movie.xpath('.//div[@class="bd"]/p/text()[4]').get(),
                'language': movie.xpath('.//div[@class="bd"]/p/text()[5]').get(),
                'release_date': movie.xpath('.//div[@class="bd"]/p/text()[6]').get(),
                'duration': movie.xpath('.//div[@class="bd"]/p/text()[7]').get(),
                'rating': movie.xpath('.//span[@class="rating_num"]/text()').get(),
                'num_reviews': movie.xpath('.//div[@class="star"]/span[@class="rating_num"]/text()').get(),
            }
登入後複製

在這個程式碼中,我們使用XPath來選取我們需要取得的資訊。我們使用yield來產生這些訊息,並使用return將它們返回到使用者。

如果我們現在運行我們的Spider(運行以下命令:scrapy crawl douban),它將爬取前250部電影的數據,並將它們返回到命令列中。

  1. 取得評分熱度排名

現在,我們已經成功地取得了前250部電影的數據。接下來,我們將獲得它們的評分熱度排名。

我們需要先建立一個新的Spider,來爬取豆瓣電影的TOP250清單。我們將使用此列表來獲取電影的排名。

在douban.py檔案中,我們將新增以下程式碼:

import scrapy

class DoubanSpider(scrapy.Spider):
    name = 'douban'
    allowed_domains = ['douban.com']
    start_urls = ['https://movie.douban.com/top250']

    def parse(self, response):
        movie_list = response.xpath('//div[@class="item"]')
        for movie in movie_list:
            yield {
                'name': movie.xpath('.//span[@class="title"]/text()').get(),
                'director': movie.xpath('.//div[@class="bd"]/p/text()[1]').get(),
                'actors': movie.xpath('.//div[@class="bd"]/p/text()[2]').get(),
                'genre': movie.xpath('.//div[@class="bd"]/p/text()[3]').get(),
                'country': movie.xpath('.//div[@class="bd"]/p/text()[4]').get(),
                'language': movie.xpath('.//div[@class="bd"]/p/text()[5]').get(),
                'release_date': movie.xpath('.//div[@class="bd"]/p/text()[6]').get(),
                'duration': movie.xpath('.//div[@class="bd"]/p/text()[7]').get(),
                'rating': movie.xpath('.//span[@class="rating_num"]/text()').get(),
                'num_reviews': movie.xpath('.//div[@class="star"]/span[@class="rating_num"]/text()').get(),
            }

        next_page = response.xpath('//span[@class="next"]/a/@href')
        if next_page:
            url = response.urljoin(next_page[0].get())
            yield scrapy.Request(url, callback=self.parse)
登入後複製

在程式碼中,我們使用了一個名為next_page的變量,來檢查我們是否到達了最後一頁。如果我們還沒到達最後一頁,我們將繼續爬取下一頁。

接下來,我們需要更新parse方法,以獲得電影的排名。我們將使用Python的enumerate函數來將排名與每部電影相關聯。

在douban.py檔案中,我們將替換原來的parse方法:

def parse(self, response):
        movie_list = response.xpath('//div[@class="item"]')
        for i, movie in enumerate(movie_list):
            yield {
                'rank': i + 1,
                'name': movie.xpath('.//span[@class="title"]/text()').get(),
                'director': movie.xpath('.//div[@class="bd"]/p/text()[1]').get(),
                'actors': movie.xpath('.//div[@class="bd"]/p/text()[2]').get(),
                'genre': movie.xpath('.//div[@class="bd"]/p/text()[3]').get(),
                'country': movie.xpath('.//div[@class="bd"]/p/text()[4]').get(),
                'language': movie.xpath('.//div[@class="bd"]/p/text()[5]').get(),
                'release_date': movie.xpath('.//div[@class="bd"]/p/text()[6]').get(),
                'duration': movie.xpath('.//div[@class="bd"]/p/text()[7]').get(),
                'rating': movie.xpath('.//span[@class="rating_num"]/text()').get(),
                'num_reviews': movie.xpath('.//div[@class="star"]/span[@class="rating_num"]/text()').get(),
            }

        next_page = response.xpath('//span[@class="next"]/a/@href')
        if next_page:
            url = response.urljoin(next_page[0].get())
            yield scrapy.Request(url, callback=self.parse)
登入後複製

現在,如果我們再次運行我們的Spider,它將獲取前250部電影的數據,並將它們會返回到命令列。此時,我們將看到所有電影的排名。

  1. 結論

Scrapy是一種非常強大且靈活的工具,用於快速且有效率地爬取資料。在本文中,我們已經成功地使用Scrapy來爬取豆瓣影片的數據和評分熱度排名。

我們使用Python程式碼和XPath來選擇性地取得網頁上的信息,並使用yield語句來將其傳回給使用者。在整個過程中,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

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

熱工具

記事本++7.3.1

記事本++7.3.1

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

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

Scrapy實現微信公眾號文章爬取與分析 Scrapy實現微信公眾號文章爬取與分析 Jun 22, 2023 am 09:41 AM

Scrapy實現微信公眾號文章爬取和分析微信是近年來備受歡迎的社群媒體應用,在其中運作的公眾號也扮演著非常重要的角色。眾所周知,微信公眾號是一個資訊和知識的海洋,因為其中每個公眾號都可以發布文章、圖文訊息等資訊。這些資訊可以被廣泛地應用在許多領域中,例如媒體報道、學術研究等。那麼,本篇文章將介紹如何使用Scrapy框架來實現微信公眾號文章的爬取與分析。 Scr

利用紐約時報API進行元資料爬取 利用紐約時報API進行元資料爬取 Sep 02, 2023 pm 10:13 PM

簡介上週,我寫了一篇關於抓取網頁以收集元資料的介紹,並提到不可能抓取《紐約時報》網站。 《紐約時報》付費牆會阻止您收集基本元資料的嘗試。但有一種方法可以使用紐約時報API來解決這個問題。最近我開始在Yii平台上建立一個社群網站,我將在以後的教程中發布該網站。我希望能夠輕鬆添加與網站內容相關的連結。雖然人們可以輕鬆地將URL貼到表單中,但提供標題和來源資訊卻非常耗時。因此,在今天的教程中,我將擴展我最近編寫的抓取程式碼,以在添加《紐約時報》連結時利用《紐約時報》API來收集頭條新聞。請記住,我參與了

Scrapy基於Ajax非同步載入實作方法 Scrapy基於Ajax非同步載入實作方法 Jun 22, 2023 pm 11:09 PM

Scrapy是一個開源的Python爬蟲框架,它可以快速且有效率地從網站上取得資料。然而,許多網站採用了Ajax非同步載入技術,使得Scrapy無法直接取得資料。本文將介紹基於Ajax非同步載入的Scrapy實作方法。一、Ajax非同步載入原理Ajax非同步載入:在傳統的頁面載入方式中,瀏覽器發送請求到伺服器後,必須等待伺服器回傳回應並將頁面全部載入完畢才能進行下一步操

豆瓣app如何設定英文模式 豆瓣app設定英文模式的方法 豆瓣app如何設定英文模式 豆瓣app設定英文模式的方法 Mar 12, 2024 pm 02:46 PM

  豆瓣app如何設定英文模式?豆瓣app是一款可以讓大家在這上面查看各種資源評論的軟體,這個軟體上面有很多的功能,用戶在首次使用這個軟體的時候,是需要進行登入的,而且這個軟體上面的語言預設就是中文模式,有些使用者就喜歡用英文模式,但是又不知道要怎麼在這個軟體上面設定英文模式,下面小編就整理了設定英文模式的方法供大家參考。豆瓣app設定英文模式的方法  1、打開手機上的「豆瓣」app;  2、點選「我的」;  3、選擇右上角的「設定」 

Scrapy案例解析:如何抓取LinkedIn上公司訊息 Scrapy案例解析:如何抓取LinkedIn上公司訊息 Jun 23, 2023 am 10:04 AM

Scrapy是一個基於Python的爬蟲框架,可以快速且方便地獲取網路上的相關資訊。在本篇文章中,我們將透過Scrapy案例來詳細解析如何抓取LinkedIn上的公司資訊。確定目標URL首先,我們需要明確我們的目標是LinkedIn上的公司資訊。因此,我們需要找到LinkedIn公司資訊頁面的URL。開啟LinkedIn網站,在搜尋框中輸入公司名稱,在

如何在PHP專案中透過呼叫API介面來實現資料的爬取與處理? 如何在PHP專案中透過呼叫API介面來實現資料的爬取與處理? Sep 05, 2023 am 08:41 AM

如何在PHP專案中透過呼叫API介面來實現資料的爬取與處理?一、介紹在PHP專案中,我們經常需要爬取其他網站的數據,並對這些數據進行處理。而許多網站提供了API接口,我們可以透過呼叫這些接口來取得資料。本文將介紹如何使用PHP來呼叫API接口,實現資料的爬取與處理。二、取得API介面的URL和參數在開始之前,我們需要先取得目標API介面的URL以及所需的

太空驚悚電影《異形:奪命艦》豆瓣開分 7.7,上映隔天票房破億 太空驚悚電影《異形:奪命艦》豆瓣開分 7.7,上映隔天票房破億 Aug 17, 2024 pm 10:50 PM

本站8月17日消息,20世紀影業旗下太空驚悚電影《異形:奪命艦》於昨日(8月16日)在內地上映,豆瓣評分今日公佈為7.7。根據燈塔專業版即時數據,截至8月17日20時5分,該片票房已突破1億。本站附評分分佈如下:5星佔20.9%4星佔比49.5%3星佔25.4%2星佔3.7%1星佔比0.6%《異形:奪命艦》由20世紀影業出品,《銀翼殺手》《普羅米修斯》導演雷德利・斯科特擔任製片人,費德・阿爾瓦雷執導,費德・阿爾瓦雷、羅多・賽亞格斯編劇,卡莉・史派妮、伊莎貝拉・默塞德、愛玲・吳、史派克・費

Scrapy優化技巧:如何減少重複URL的爬取,提高效率 Scrapy優化技巧:如何減少重複URL的爬取,提高效率 Jun 22, 2023 pm 01:57 PM

Scrapy是一個功能強大的Python爬蟲框架,可用於從網路上取得大量的資料。但是,在進行Scrapy開發時,經常會遇到重複URL的爬取問題,這會浪費大量的時間和資源,影響效率。本文將介紹一些Scrapy優化技巧,減少重複URL的爬取,提升Scrapy爬蟲的效率。一、使用start_urls和allowed_domains屬性在Scrapy爬蟲中,可

See all articles