使用py怕爬豆瓣影评
import requests
from bs4 import BeautifulSoup
import pandas as pd
import time
# 目标URL,替换为你想爬取的电影页面的ID
movie_id = '26752088' # 示例:电影《哪吒之魔童降世》的ID
url = f"https://movie.douban.com/subject/{movie_id}/comments"
# 请求头,模拟浏览器访问
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
}
# 存储影评信息的列表
comments_list = []
# 爬取多个页面的数据(每个页面包含 20 条影评)
def get_comments(page_num=10):
for page in range(page_num):
print(f'正在爬取第 {page + 1} 页的影评...')
# 使用 params 参数传递 start 值,控制翻页
params = {
'start': page * 20,
'limit': 20,
'sort': 'new_score',
'status': 'P'
}
# 发送 GET 请求
response = requests.get(url, headers=headers, params=params)
soup = BeautifulSoup(response.text, 'lxml')
# 查找影评的列表
comment_divs = soup.find_all('div', class_='comment')
for div in comment_divs:
# 提取用户、评分、评论时间和影评内容
user = div.find('span', class_='comment-info').find('a').get_text()
try:
rating = div.find('span', class_='rating')['title']
except TypeError:
rating = '无评分'
comment_time = div.find('span', class_='comment-time')['title']
comment_content = div.find('span', class_='short').get_text().strip()
# 将提取到的信息添加到列表
comments_list.append({
'User': user,
'Rating': rating,
'Time': comment_time,
'Comment': comment_content
})
# 适当延时,避免请求过快被封
time.sleep(2)
# 调用函数获取影评
get_comments(10) # 设置需要爬取的页数,例如10页
# 使用 pandas 将数据保存为 CSV 文件
df = pd.DataFrame(comments_list)
df.to_csv('douban_movie_comments.csv', index=False, encoding='utf-8-sig')
print("爬取完成,数据已保存为 douban_movie_comments.csv")