Scrapy是一個開源的Python框架,用於快速且有效率地爬取資料。在本文中,我們將使用Scrapy爬取豆瓣影片的數據和評分熱度排名。
首先,我們需要安裝Scrapy。您可以在命令列中輸入以下命令來安裝Scrapy:
pip install scrapy
接下來,我們將建立一個Scrapy專案。在命令列中,輸入以下命令:
scrapy startproject doubanmovie
這將建立一個名為doubanmovie的Scrapy專案。然後,我們將進入專案目錄並建立一個名為douban.py的Spider。在命令列中,輸入以下命令:
cd doubanmovie scrapy genspider douban douban.com
現在,我們已經有了一個可以使用的Spider。接下來,我們將定義Spider的行為以取得所需的資料。
我們將使用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部電影的數據,並將它們返回到命令列中。
現在,我們已經成功地取得了前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部電影的數據,並將它們會返回到命令列。此時,我們將看到所有電影的排名。
Scrapy是一種非常強大且靈活的工具,用於快速且有效率地爬取資料。在本文中,我們已經成功地使用Scrapy來爬取豆瓣影片的數據和評分熱度排名。
我們使用Python程式碼和XPath來選擇性地取得網頁上的信息,並使用yield語句來將其傳回給使用者。在整個過程中,Scrapy提供了一個簡單而有效的方式來管理和爬取大量的數據,使我們能夠快速地進行數據分析和處理。
以上是Scrapy實戰:爬取豆瓣電影數據與評分熱度排名的詳細內容。更多資訊請關注PHP中文網其他相關文章!