import requests
from bs4 import BeautifulSoup
import csv
import time
# 1. 设置请求头,模拟浏览器访问
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
}
# 2. 目标URL
url = 'https://movie.douban.com/top250'
try:
print("开始爬取豆瓣Top250...")
# 3. 发送GET请求
response = requests.get(url, headers=headers, timeout=10)
response.raise_for_status() # 检查请求是否成功
# 4. 解析HTML文档
soup = BeautifulSoup(response.text, 'html.parser')
# 5. 提取数据
movie_list = soup.find_all('div', class_='item')
data = []
for item in movie_list:
rank = item.find('em').text
title = item.find('span', class_='title').text
rating = item.find('span', class_='rating_num').text
link = item.find('a')['href']
data.append([rank, title, rating, link])
print(f"成功获取:{rank} - {title} - 评分:{rating}")
# 6. 写入CSV文件
with open('douban_movies.csv', 'w', newline='', encoding='utf-8-sig') as f:
writer = csv.writer(f)
writer.writerow(['排名', '电影名', '评分', '详情链接'])
writer.writerows(data)
print(f"\n爬取完成!共获取 {len(data)} 条数据,已保存至 douban_movies.csv")
except requests.exceptions.RequestException as e:
print(f"网络请求出错:{e}")
except Exception as e:
print(f"解析或保存数据时出错:{e}")
# 7. 延时,防止请求过快
time.sleep(1)