使用python进行网络爬虫豆瓣影评
使用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")