用Python爬蟲爬取豆瓣電影Top250

简介: 在這個數據驅動的時代,網頁數據爬取成為了很多技術愛好者和數據分析師的必備技能。而Python作為一門簡單易學且功能強大的編程語言,因其豐富的第三方庫,成為了實現網頁爬蟲的首選工具。本文將帶您

在這個數據驅動的時代,網頁數據爬取成為了很多技術愛好者和數據分析師的必備技能。而Python作為一門簡單易學且功能強大的編程語言,因其豐富的第三方庫,成為了實現網頁爬蟲的首選工具。本文將帶您一步一步實現使用Python爬蟲技術來爬取豆瓣電影Top250榜單的完整過程。

1. 為什麼選擇爬取豆瓣電影Top250?

豆瓣電影作為一個專業且受歡迎的電影評價網站,擁有大量用戶和高質量的電影數據。其Top250榜單涵蓋了全球範圍內的高分經典電影,這對於電影愛好者來說是一個非常有價值的數據源。通過爬取這些數據,我們可以進行多維度的數據分析,比如電影評分分佈、國家和地區分佈、類型分析等。

2. 準備工作

在開始編寫爬蟲之前,我們需要安裝一些必備的Python第三方庫,包括requests、beautifulsoup4和pandas。可以通過以下命令安裝這些庫:

pip install requests

pip install beautifulsoup4

pip install pandas

3. 編寫爬蟲代碼

我們需要了解豆瓣電影Top250頁面的結構。打開豆瓣電影Top250頁面(https://movie.douban.com/top250),我們可以看到每頁展示25部電影,共10頁。這意味著我們需要爬取10個頁面,才能獲取完整的Top250數據。

以下是完整的爬蟲代碼,請您逐步理解每一部分的作用:

import requests

from bs4 import BeautifulSoup

import pandas as pd

# 定義目標URL

base_url = "https://movie.douban.com/top250"

# 定義爬蟲函數

def fetch_douban_top250():

movies = []

for i in range(10):

url = f"{base_url}?start={i * 25}"

response = requests.get(url)

soup = BeautifulSoup(response.text, "html.parser")

# 爬取電影信息

for item in soup.find_all('div', class_='item'):

rank = item.find('em').text

title = item.find('span', class_='title').text

rating = item.find('span', class_='rating_num').text

info = item.find('p').text.strip().replace("\n", " ")

movies.append({

"Rank": rank,

"Title": title,

"Rating": rating,

"Info": info

})

return movies

# 調用爬蟲函數並保存數據

movies = fetch_douban_top250()

df = pd.DataFrame(movies)

df.to_csv("douban_top250.csv", index=False)

print("豆瓣電影Top250數據已成功保存至'douban_top250.csv'")

4. 代碼詳解

requests:用於發送HTTP請求並獲取網頁內容。

BeautifulSoup:用於解析HTML結構,提取所需數據。

pandas:用於數據處理和保存。

在爬蟲函數中,我們使用了循環來遍歷每一頁,通過修改URL中的start參數來實現。接著,我們解析每個電影項目的排名、標題、評分和詳細信息,並將這些數據存儲在一個列表中。最終,我們使用pandas將列表轉換為DataFrame並保存為CSV文件。

5. 數據分析與可視化

現在我們已經成功獲取並保存了豆瓣電影Top250數據,接下來我們可以使用這些數據進行一些簡單的分析和可視化。

5.1 讀取數據

我們需要讀取之前保存的CSV文件:

df = pd.read_csv("douban_top250.csv")

5.2 評分分佈分析

我們可以使用matplotlib庫來繪製電影評分的分佈圖:

import matplotlib.pyplot as plt

# 繪製評分分佈圖

plt.figure(figsize=(10, 6))

plt.hist(df['Rating'], bins=20, color='skyblue', edgecolor='black')

plt.xlabel('Rating')

plt.ylabel('Number of Movies')

plt.title('Distribution of Movie Ratings in Douban Top 250')

plt.show()

這樣,我們就能夠直觀地看到豆瓣Top250電影的評分分佈情況。

5.3 國家和地區分佈分析

電影的國家和地區分佈也是一個有趣的分析方向。由於我們的數據中並未直接包含這些信息,因此我們需要對詳細信息進行進一步的解析:

import re

# 提取國家和地區信息

def extract_country(info):

match = re.search(r'\d{4}.*?/(.*?)/', info)

if match:

return match.group(1).strip()

return 'Unknown'

df['Country'] = df['Info'].apply(extract_country)

# 計算每個國家和地區的電影數量

country_counts = df['Country'].value_counts()

# 繪製國家和地區分佈圖

plt.figure(figsize=(12, 8))

country_counts.plot(kind='bar', color='lightcoral')

plt.xlabel('Country')

plt.ylabel('Number of Movies')

plt.title('Distribution of Movies by Country in Douban Top 250')

plt.show()

這樣,我們就能夠看到哪些國家和地區的電影在豆瓣Top250榜單中佔有較大比例。

6. 總結與展望

通過本文的介紹,我們從零開始,逐步實現了使用Python爬蟲技術來爬取豆瓣電影Top250數據的完整過程。從數據的獲取到保存,從數據的簡單分析到可視化,我們初步體驗了數據爬取和分析的樂趣。

在實際應用中,這些數據還可以進行更深入的挖掘和分析,比如根據電影類型、導演、演員等維度進行多層次的數據探索,甚至可以結合其他數據源,進行跨數據的綜合分析。

Python作為一門強大的編程語言,其靈活性和強大的庫支持,使得我們能夠輕鬆應對各種數據處理任務。希望本文能夠激發您的興趣,讓您在Python和數據世界中探索得更遠。

總之,無論您是數據分析師、數據科學家,還是對編程和電影有興趣的愛好者,相信本文的內容都能給您帶來啟發和幫助。讓我們一起享受這段充滿挑戰與樂趣的學習之旅吧!

评论列表

发表评论