欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 美景 > Python爬取豆瓣电影的评论

Python爬取豆瓣电影的评论

2025/3/16 20:59:07 来源:https://blog.csdn.net/m0_74293254/article/details/141053125  浏览:    关键词:Python爬取豆瓣电影的评论

目标网页

名侦探柯南VS怪盗基德 短评

接着开始点击F12,寻找我们想要的信息

 

Python代码

使用到的库

  • requests: 用于发送 HTTP 请求,获取网页内容。
  • BeautifulSoup: 来自 bs4 库,用于解析 HTML 和 XML 文档。
  • pandas: 用于数据处理和分析,特别是用于将数据保存为 Excel 文件。
  • load_workbook 和 Image: 来自 openpyxl 库,用于加载 Excel 文件并处理图像。
  • Alignment: 用于设置 Excel 单元格的对齐方式。
  • BytesIO: 用于处理二进制数据流,特别是在加载图片时使用。

具体代码

import requests
from bs4 import BeautifulSoup
import pandas as pd
from openpyxl import load_workbook
from openpyxl.drawing.image import Image
from openpyxl.styles import Alignment
from io import BytesIO# 要爬取的网页URL
base_url = 'https://movie.douban.com/subject/36671126/comments?status=P'
page_url = base_url# 发送GET请求获取网页内容
response = requests.get(page_url, headers={'User-Agent': 'Mozilla/5.0'})
soup = BeautifulSoup(response.content, 'html.parser')# 提取标题
title = soup.find('h1').get_text().strip()# 初始化列表用于存储评论数据
data = {"用户头像": [],"序号": [],"帐号名称": [],"评价星级": [],"评价时间": [],"评价地点": [],"评论内容": []
}count = 1  # 初始化序号while True:# 逐个提取评论信息comment_items = soup.find_all('div', class_='comment-item')for item in comment_items:# 查找用户头像avatar_tag = item.find('img', class_='')avatar_url = avatar_tag['src'] if avatar_tag else ''# 查找帐号名称user_info = item.find('span', class_='comment-info')username = user_info.find('a').get_text().strip() if user_info else '未知用户'# 查找评价星级rating_tag = item.find('span', class_='rating')rating = rating_tag['title'] if rating_tag else '无评分'# 查找评价时间comment_time = item.find('span', class_='comment-time').get_text().strip() if item.find('span', class_='comment-time') else ''# 查找评价地点location = item.find('span', class_='comment-location')location = location.get_text().strip() if location else ''# 查找评论内容comment = item.find('span', class_='short').get_text().strip() if item.find('span', class_='short') else ''# 检查所有字段是否均为空if not (username == '未知用户' and rating == '无评分' and not comment_time and not location and not comment):# 添加数据data["用户头像"].append(avatar_url)data["序号"].append(count)data["帐号名称"].append(username)data["评价星级"].append(rating)data["评价时间"].append(comment_time)data["评价地点"].append(location)data["评论内容"].append(comment)count += 1  # 递增序号# 查找“后页”链接next_page = soup.find('a', class_='next')# 如果“后页”链接不存在或变为<span class="next">,则停止循环if not next_page or next_page.name == 'span':print("已到达最后一页,爬虫结束。")break# 更新page_url为下一个页面的URLpage_url = 'https://movie.douban.com/subject/36671126/comments' + next_page['href']response = requests.get(page_url, headers={'User-Agent': 'Mozilla/5.0'})soup = BeautifulSoup(response.content, 'html.parser')# 将数据转换为DataFrame
df = pd.DataFrame(data)# 创建一个Excel写入器并写入标题和数据
excel_filename = 'douban_comments_with_title_and_avatar.xlsx'
with pd.ExcelWriter(excel_filename, engine='openpyxl') as writer:# 写入评论数据,从第三行开始df.to_excel(writer, sheet_name='Sheet1', index=False, startrow=2)# 获取当前工作簿workbook = writer.bookworksheet = writer.sheets['Sheet1']# 合并前五列的第一、二行单元格并写入标题worksheet.merge_cells(start_row=1, start_column=1, end_row=2, end_column=10)worksheet['A1'] = title# 设置标题的对齐方式为居中worksheet['A1'].alignment = Alignment(horizontal='center', vertical='center')# 插入图片到Excel并调整行高和列宽for idx, img_url in enumerate(data["用户头像"], start=4):if img_url:  # 如果头像URL存在img_data = requests.get(img_url).contentimg = Image(BytesIO(img_data))img.width = 50  # 设置图片宽度img.height = 50  # 设置图片高度cell = f'A{idx}'worksheet.add_image(img, cell)# 调整行高和列宽以适应图片worksheet.row_dimensions[idx].height = 50  # 设置行高worksheet.column_dimensions['A'].width = 12  # 设置列宽# 保存文件
print(f"数据已成功保存到 {excel_filename}")

运行结果

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词