首页 > 其他分享 >6.5

6.5

时间:2024-06-11 09:37:07浏览次数:15  
标签:comment 短评 text list 6.5 print import

完成python作业

 

8-2 【Python0026】图书评论数据分析与可视化

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

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

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

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

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

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

【练习要求】请给出源代码程序和运行测试结果,源代码程序要求添加必要的注释。

 

 

 

import re

from collections import Counter

import requests

from lxml import etree

import pandas as pd

import jieba

import matplotlib.pyplot as plt

from wordcloud import WordCloud

 

headers = {

    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.54 Safari/537.36 Edg/101.0.1210.39"

}

 

comments_list = []

words_list = []

 

def clean_text(text):

    text = re.sub(r"[\n”“|,,;;''/?! 。的了是]", "", text)

    text = re.sub(r"^\d+::", "", text)

    text = re.sub(

        r"(https?://)?([a-zA-Z0-9]+)(\.[a-zA-Z0-9]+)(\.[a-zA-Z0-9]+)*(/[a-zA-Z0-9]+)*", "", text, re.IGNORECASE)

    text = re.sub(u"年|月|日|周一|周二|周三|周四|周五|周六", "", text)

    text = re.sub(r"[^a-zA-Z]\d+", "", text)

    text = re.sub(r"\s+", "", text)

    return text

 

def extract_comments(url):

    resp = requests.get(url, headers=headers).text

    html = etree.HTML(resp)

    comment_list = html.xpath(".//div[@class='comment']")

    for comment in comment_list:

        username = comment.xpath(".//span[@class='comment-info']/a/text()")[0]

        content = comment.xpath(".//p[@class='comment-content']/span[@class='short']/text()")[0].strip()

        words_list.extend([clean_text(word) for word in jieba.cut(content, cut_all=False, HMM=False) if len(clean_text(word)) >= 2])

        time = comment.xpath(".//span[@class='comment-info']/a/text()")[1]

        mark = comment.xpath(".//span[@class='comment-info']/span/@title")

        score = 0 if len(mark) == 0 else 5 if mark[0] == "力荐" else 4 if mark[0] == "推荐" else 3 if mark[0] == "还行" else 2 if mark[0] == "较差" else 1

        likes = int(comment.xpath(".//span[@class='comment-vote']/span[@class='vote-count']/text()")[0])

        comments_list.append([username, content, time, score, likes])

 

def generate_wordcloud(words):

    text = ' '.join(words)

    wordcloud = WordCloud(background_color='white', width=1000, height=700, font_path='simhei.ttf', margin=10).generate(text)

 

    plt.imshow(wordcloud)

    plt.axis("off")

    plt.show()

    wordcloud.to_file('wordcloud.png')

 

print("请选择以下选项:")

print("   1.热门评论")

print("   2.最新评论")

selected_option = int(input())

 

if selected_option == 1 or selected_option == 2:

    comments_list.clear()

    words_list.clear()

   

    for i in range(0, 60, 20):

        sort_type = "new_score" if selected_option == 1 else "time"

        url = f"https://book.douban.com/subject/10517238/comments/?start={i}&limit=20&status=P&sort={sort_type}"

        extract_comments(url)

 

    columns = ['用户名', '短评内容', '评论时间', '评分', '点赞数']

    df = pd.DataFrame(comments_list, columns=columns)

 

    print("前10位短评信息:")

    print(df.head(10))

 

    print("点赞数前10位的短评信息:")

    df_sorted = df.sort_values(by='点赞数', ascending=False)

    print(df_sorted.head(10))

 

    generate_wordcloud(words_list)

else:

    print("无效选项,请重新运行程序并选择1或2。")

 

 

 

 

 

标签:comment,短评,text,list,6.5,print,import
From: https://www.cnblogs.com/zljzy/p/18241513

相关文章

  • OpenAI年薪仅6.5万美元,奥特曼却掌控28亿美元创业帝国 | 最新快讯
    6月7日消息,尽管萨姆·奥特曼(SamAltman)作为OpenAI的联合创始人兼首席执行官而广为人知,但他在风险投资和创业投资领域的角色同样重要。鲜为人知的是,奥特曼掌管着价值超过28亿美元的投资帝国,这与他在OpenAI领取的6.5万美元薪资形成了鲜明对比。他的家族办公室正在管理这一帝国,涵......
  • 每天的CTF小练--6.5(ascll码高级运用)
    题目:[HUBUCTF2022新生赛]baby_encrypthint:781612443113954655886887407898899451044114412011257135914071455155316031651170318041861191719652013207021272183228423832485254125932643269827992924注意查看前面的数字,这题不想现代密码,chr(78)chr(161-78)chr(244-1......
  • 6.5
    rddmapfilterflatmapgroupbydistinctsortby//TODOmap方法的作用就是将传入的A转换为B返回,但是没有限制A和B的关系。finalJavaRDD<Integer>newRDD1=rdd.map(num->{System.out.println("@"+num);......
  • 6.5总结
    今天上午做python大作业和工程数学实验今天收获:使用python调用百度地图api从地图上爬取数据,获得石家庄铁道大学内部部分建筑物地点的信息,并存入数据库代码:1importrequests2importjson34#Step1:申请百度地图API密钥5api_key='your_api_key'#请将your_......
  • 6.5每日总结
    可视化第一版本<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metahttp-equiv="X-UA-Compatible"content="IE=edge,chrome=1"><metaname="renderer"co......
  • 6.5
    实验三:Newton法程序设计一、实验目的掌握Hesse矩阵的计算方法和Newton法的基本思想及其迭代步骤;学会运用MATLAB编程实现常用优化算法;能够正确处理实验数据和分析实验结果及调试程序。  二、实验内容(1)求解无约束优化问题:f(x)=(x1+10x2)^2+5(x3-x4)^2+(x2-2x3)^4+10(x1-x4)^......
  • 6.5
    这次放假,第一要义就是“莫谈国事”。以下大概记叙一下火车上的见闻与感想。(这里应该有张图片,大家可以yy一下)“景翳翳以将入?未入,隐于云后,正泛着粼粼波光。”原始的不再原始,现代的更加现代。原始的镰刀逐渐被割草机取代,有些地方的麦田也增添了太阳能电池板。不过鸟儿依旧会在......
  • 6.5数组--模拟、偏移量-螺旋矩阵
    M:59.螺旋矩阵II题意描述给你一个正整数n,生成一个包含1到n^2所有元素,且元素按顺时针顺序螺旋排列的nxn正方形矩阵matrix。示例1:输入:n=3输出:[[1,2,3],[8,9,4],[7,6,5]]示例2:输入:n=1输出:[[1]]提示:1<=n<=20思路这道题目可以说在面试中出现......
  • 6.5
    活了又死了这学期Really和班主任在看小说的上面斗争了一学期(md,被制裁了)起因是有一天借了一本《齐马蓝》(大小参考算法竞赛)周六晚三我拿出了小说开始读xxw(你们知道我说的是谁,司马截),在监控里把我抓了一个正着,下来就把我抓了然后我用最后十分钟写了一个检讨拍尽了她的马屁最......
  • Studio One6.5最新版本软件功能介绍及用户使用步骤教程S及安装激活使用方法
     StudioOne做为新生代音乐工作站,凭借更低的价格和完备的功能,获得了音乐人和直播行业工作者的青睐,尤其是对硬件声卡的适配支持更好,特别适合用来配合线上教学和电商带货。最近网上出现不少关于StudioOne不能用或者StudioOne掉激活的问题讨论,其原因是使用了非正版软件,下面让我......