实用指南:豆瓣图书评论数据分析与可视化

news/2025/10/7 12:33:52/文章来源:https://www.cnblogs.com/yxysuanfa/p/19128356

【题目描述】豆瓣图书评论数据爬取。以《平凡的世界》、《都挺好》等为分析对象,编写程序爬取豆瓣读书上针对该图书的短评信息,要求:

(1)对前3页短评信息进行跨页连续爬取;

(2)爬取的数据包含用户名、短评内容、评论时间、评分和点赞数(有用数);

(3)能够根据选择的排序方式(热门或最新)进行爬取,并分别针对热门和最新排序,输出前10位短评信息(包括用户名、短评内容、评论时间、评分和点赞数)。

(4)根据点赞数的多少,按照从多到少的顺序将排名前10位的短评信息输出;

(5附加)结合中文分词和词云生成,对前3页的短评内容进行文本分析:按照词语出现的次数从高到低排序,输出前10位排序结果;并生成一个属于自己的词云图形。

1. 抓取获取<<都挺好>>短评的 url

https://book.douban.com/subject/20492971/comments/?start=20&limit=20&status=P&sort=score
分析url

  • subject/20492971:书籍ID为20492971
  • comments/:评论页面
  • start=20:从第20条评论开始显示(分页参数)
  • limit=20:每页显示20条评论
  • status=P:只显示已发布的评论(P代表Published)
  • sort=score:按点赞量排序

经分析 sort=time 为按时间排序 (最新) - 需要登录豆瓣

2. 获取headers 和 Cookie
在爬取豆瓣等反爬机制较严格的网站时,​​模拟浏览器行为​​ 是关键。以下是补全的爬虫策略,包括 ​​请求头设置、Cookies、延迟控制、代理IP​​ 等关键点:

关键反爬策略​​:

  • 必须配置完整的请求头(Headers)和Cookies
  • 建议使用代理IP池(特别是大规模爬取时)
  • 合理设置请求间隔(本示例未展示,但生产环境建议添加)

分享一个好用的网站 

Convert curl commands to Python 

它可以将 cURL 命令快速转换为 Python、JavaScript、PHP 等多种语言的代码,非常适合爬虫开发时快速生成请求模板。

使用方法 :  以cURL(bash)格式复制 , 复制到网站

复制到curl command , 下方会自动生成代码 , 可以选择不同的语言

有了cookies 和 headers 剩下的就是爬虫的基本功了


    代码:

    import matplotlibimport requestsfrom lxml import etreeimport jiebafrom collections import Counterfrom wordcloud import WordCloudimport matplotlib.pyplot as pltmatplotlib.rcParams['font.sans-serif'] = ['SimHei']  # 设置中文字体为 SimHeimatplotlib.rcParams['axes.unicode_minus'] = False    # 正确显示负号cookies = {    # 你的cookies} headers = {    # 你的headers}# proxies = {#     # 可以配置一个代理池#     # 'http': 'http://120.25.1.15:7890',#     # 'https': 'http://120.25.1.15:7890',    # } def get_comment(page, sort_type, comment_list):    url = f'https://book.douban.com/subject/20492971/comments/?start={page * 20}&limit=20&sort={sort_type}&status=P'    response = requests.get(url, cookies=cookies, headers=headers)    response.encoding = 'utf-8'    tree = etree.HTML(response.text)    li_list = tree.xpath('//*[@id="comments"]/div[1]/ul/li')    for li in li_list:        try:            like_count = li.xpath('./div[2]/h3/span[1]/span/text()')[0].strip()            name = li.xpath('./div[2]/h3/span[2]/a[1]/text()')[0].strip()            score = li.xpath('./div[2]/h3/span[2]/span/@title')[0].strip()            time = li.xpath('./div[2]/h3/span[2]/a[2]/text()')[0].strip()            comment = li.xpath('./div[2]/p/span/text()')[0].strip()            comment_list.append({                'name': name,                'score': score,                'time': time,                'like_count': like_count,                'comment': comment            })        except Exception:            continue    print(f'第{page + 1}页爬取成功') def analyze_text(comment_list):    all_text = ''.join([c['comment'] for c in comment_list])    words = jieba.lcut(all_text)     # 去除常见无意义词(可根据需要扩展)    stop_words = set(['的', '了', '和', '是', '我', '也', '就', '都', '很', '在', '有', '不', '人'])    words = [word for word in words if len(word) > 1 and word not in stop_words]     # 统计词频    word_counts = Counter(words)    top_words = word_counts.most_common(10)     print("词频前10名:")    for i, (word, count) in enumerate(top_words, 1):        print(f"{i}. {word}:{count} 次")     # 生成词云    wc = WordCloud(        font_path='simhei.ttf',  # 确保有中文字体        background_color='white',        width=800,        height=600    ).generate_from_frequencies(word_counts)     plt.figure(figsize=(10, 6))    plt.imshow(wc, interpolation='bilinear')    plt.axis('off')    plt.title("豆瓣短评词云", fontsize=18)    plt.show()    wc.to_file("wordcloud.png") def main():    choice = input("请输入查看类型(1:热门评论,2:最新评论):")    if choice == '1':        sort_type = 'score'    elif choice == '2':        sort_type = 'time'    else:        print("无效输入,默认使用热门评论。")        sort_type = 'score'     comment_list = []    for i in range(3):        get_comment(i, sort_type, comment_list)     # 展示前10条评论    print("\n前10条评论:\n")    for i, c in enumerate(comment_list[:10], 1):        print(f"{i}. {c['name']} | {c['score']} | {c['time']} | 赞:{c['like_count']}\n评论:{c['comment']}\n")     # 分析评论文本    analyze_text(comment_list) if __name__ == '__main__':    main()

    需要替换为你的

    安装包的命令

    # 基础请求与解析库pip install requests lxml jieba # 词云与数据分析库pip install wordcloud matplotlib

    完成 

    技术要点解析

    1. ​反爬对策​​:

      • 使用真实浏览器的Headers和Cookies
      • 建议添加随机延迟(time.sleep(random.uniform(1,3)))
      • 重要项目建议使用代理IP池
    2. ​数据解析技巧​​:

      • 使用lxml的XPath定位元素
      • 健壮的异常处理(网络超时、元素不存在等)
      • 数据清洗(去除空白字符等)
    3. ​文本分析优化​​:

      • 扩展停用词表提升分析质量
      • 可考虑添加自定义词典(jieba.load_userdict())
      • 词云可调整参数:背景色、最大词汇数、遮罩形状等

    本项目展示了从数据爬取到分析可视化的完整流程,读者可根据实际需求进行扩展。建议在遵守豆瓣Robots协议的前提下合理使用爬虫技术,注意控制请求频率,避免对目标网站造成负担。

    提醒 : 大规模爬取会被豆瓣封ip

    ​声明​​:本教程仅用于学习交流,请勿用于商业用途或大规模爬取,尊重网站的数据版权。

    本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/930410.shtml

    如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

    相关文章

    cpa广告联盟网站建设高端网站开发平台

    文章目录 标准化与池化1. 标准化/归一化1.1 归一化归一化的作用 1.2 标准化批标准化方法 Batch Normailzation标准化方法的对比自动学习标准化方法 2. 池化2.1 池化的作用2.2 常见的池化方法2.3 池化方法的差异2.4 池化的必要性 标准化与池化 1. 标准化/归一化 1.1 归一化 归…

    网站开发的核心技术上海装修公司招聘施工队长

    概述 jQuery 是继 prototype 之后又一个优秀的 Javascript 框架。其宗旨是—写更少的代码,做更多的事情。它是轻量级的 js 库(压缩后只有21k) &#xff0c;这是其它的 js 库所不及的&#xff0c;它兼容 CSS3&#xff0c;还兼容各种浏览器&#xff08;IE 6.0, FF 1.5, Safari 2.…

    网站怎么做电脑系统下载wordpress文章表情插件

    每个进程都有三个标准文件描述符&#xff1a;stdin&#xff08;标准输入&#xff09;、stdout&#xff08;标准输出&#xff09;和stderr&#xff08;标准错误&#xff09;。默认情况下&#xff0c;stderr会输出到终端。使用2>可以将stderr重定向到其他地方&#xff0c;比如…

    广州市番禺区官网seo站群干什么的

    题目 题目链接 分析 这道题目一定要多读几遍&#xff0c;才能理解。 大意就是你有钱budget 和 库存stock的金属零件&#xff0c;让你从一堆机器里面选择一种机器可以合成最多金属的数量是多少&#xff0c;这些机器合成金属需要的零件数目是不一样的&#xff0c;composition…

    网站手机客户端在线制作北京知名网站

    本文节介绍 PP-TSM 模型如何转化为 ONNX 模型&#xff0c;并基于 ONNX 引擎预测。 1&#xff1a;环境准备 安装 Paddle2ONNX python -m pip install paddle2onnx 安装 ONNXRuntime # 建议安装 1.9.0 版本&#xff0c;可根据环境更换版本号 python -m pip install onnxrunti…

    完整教程:Excel to JSON 插件 2.4.0 版本更新

    完整教程:Excel to JSON 插件 2.4.0 版本更新pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", &q…

    Ai元人文:人文逻辑与规则逻辑的统一

    Ai元人文:人文逻辑与规则逻辑的统一 让我们从 “人文逻辑与规则逻辑统一” 这一核心视角,对AI元人文构想进行一场深度的剖析与整合。 这不仅是技术的融合,更是一场认识论上的革命。 图片 核心理念:逻辑的统一而非对…

    北仑网站制作线上推广渠道和方式

    错误二&#xff1a;[ERR] 1227 - Access denied; you need (at least one of) the SUPER privilege… 觖决办法 用文本工具打开sql文件 查找&#xff1a; DEFINER fit_root% 把fit_root%账号改成你实际导入的那台服务器mysql账号保存即可

    佛山市城乡住房建设局网站首页公众号可以开视频号?

    背景 近期工作中要解决两个问题&#xff0c;一个是数据组需要网爬一些图片数据&#xff0c;另外一个是要批量爬取公司用于文档协同的一个网站上的附件。于是乎&#xff0c;就写了两个脚本去完成任务。 爬虫思路 第一步&#xff1a;向确定的url发送请求&#xff0c;接收服务器…

    《二千年间》在线阅读

    《二千年间》,作者:胡绳:https://www.dushu.com/guoxue/106674/

    实用指南:Java 单例模式详解

    pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

    oppoR9m刷Linux系统: 安装MTK USB VCOM驱动

    前言全局说明安装MTK USB 驱动注意:刷机,会丢失用户:照片、聊天等信息资料。请备份基带等信息。请慎重刷机 !!! 注意:刷机,会丢失用户:照片、聊天等信息资料。请备份基带等信息。请慎重刷机 !!! 注意:刷机,会丢…

    建设网站费用计入什么科目山东企业展厅设计公司

    缓存技术在现代Web开发中至关重要&#xff0c;尤其是在高并发的环境中&#xff0c;缓存能够有效减少数据库访问压力、提高系统性能。Redis作为最流行的内存数据存储系统之一&#xff0c;常用于缓存管理。本节将讲解如何在Spring Boot项目中集成Redis&#xff0c;实现缓存管理&a…

    数据结构与算法学习笔记(Acwing 提高课)----动态规划树形DP - 详解

    数据结构与算法学习笔记(Acwing 提高课)----动态规划树形DP - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: &qu…

    注册网站卖钱最多的人中山网站建设哪家便宜

    我刚刚开始为Isis开发 OpenJPA对象库 。 在一般情况下&#xff0c;可以在persistence.xml文件中注册实体类型。 但是&#xff0c;Isis是一个框架&#xff0c;可以构建自己的元模型&#xff0c;并且可以自行确定哪些类构成实体。 因此&#xff0c;我不想强​​迫开发人员重复自己…

    自己做网站还能挣钱吗家电网站建设

    建立openstack quantum开发环境 作者&#xff1a;张华 发表于&#xff1a;2012-4-6 版权声明&#xff1a;可以任意转载&#xff0c;转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明 ( http://blog.csdn.net/quqi99 ) 上篇中讲了如何建立openstack的最小开发环…

    可视化大屏工具对比:GoView、DataRoom、积木JimuBI、Metabase、DataEase、Apache Superset 与 Grafana - 实践

    pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

    [特殊字符] FFmpeg 学习笔记 - 详解

    [特殊字符] FFmpeg 学习笔记 - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco…

    .NET周刊【9月第3期 2025-09-21】

    国内文章 Runtime Async - 步入高性能异步时代 https://www.cnblogs.com/hez2010/p/19097937/runtime-async 本文详细阐述了同步与异步代码的区别以及 async/await 的机制。同步代码阻塞线程,异步代码则不阻塞线程,依…