爬虫之豆瓣图书评论词云

from urllib import request
from bs4 import BeautifulSoup as bs
import re
import codecs
import jieba  #分词包
import numpy    #numpy计算包
import pandas as pd #分词用到
import matplotlib.pyplot as plt  #绘图包
import matplotlib
matplotlib.rcParams[‘figure.figsize‘] = (10.0,5.0)
from wordcloud import WordCloud #词云包

#爬取豆瓣最受关注图书榜
resp = request.urlopen(‘https://book.douban.com/chart?subcat=I‘)
html_data = resp.read().decode(‘utf-8‘)

#转化为BeautifulSoup对象
soup = bs(html_data,‘html.parser‘)

#搜索最受关注的图书列表
topchart_book =soup.find_all(‘ul‘,class_=‘chart-dashed-list‘)

#搜索列表中所有图书
topchart_book_list = topchart_book[0].find_all(‘li‘,class_=‘media clearfix‘)

#新建数组用于存放后续的数据
topchart_list = []

#遍历图书馆列表,从中过滤出我们所需的信息
for item in topchart_book_list:
    #新建字典用于存放我们的图书信息,之后可用class来存储
    topchart_dict = {}

    #搜索到具体信息的位置
    book_item = item.find(‘a‘,class_=‘fleft‘)

    #得到图书ID
    topchart_dict[‘id‘] = book_item[‘href‘].split(‘/‘)[4]   

    #得到图书名称
    topchart_dict[‘name‘] = book_item.getText().replace(‘\t‘,‘‘).replace(‘\n‘,‘‘).replace(‘ ‘,‘‘)  #图书名字

    #将图书信息加入到数组中
    topchart_list.append(topchart_dict)
# print(topchart_list)

#拼接出图书对应的详情页
requrl = ‘https://book.douban.com/subject/‘+topchart_list[0][‘id‘]+‘/comments/hot‘+‘?‘+‘p-1‘

#爬取热门第一页中的评论信息
resp = request.urlopen(requrl)
html_data = resp.read().decode(‘utf-8‘)
soup = bs(html_data,‘html.parser‘)

#搜索到评论所在div
comment_div_lits = soup.find_all(‘div‘,class_=‘comment‘)

#新建数组用于存放评论信息
eachCommentList = []

for item in comment_div_lits:
    if item.find_all(‘p‘)[0].string is not None:
        eachCommentList.append(item.find_all(‘p‘)[0].string)
# print(eachCommentList)

#为了方便进行数据进行清洗,我们将列表中的数据放在一个字符串数组中
commits = ‘‘
for k in range(len(eachCommentList)):
    commits = commits + (str(eachCommentList[k])).strip()

# print(commits)
# exit()

#可以看到所有的评论已经变成一个字符串了,但我们发现评论中还有不少标点符号等
#这些符号对我们进行词频统计根本就没有用,因此将他们清除,所用的方法是正则表达式
pattern = re.compile(r‘[\u4e00-\u9fa5]+‘)
filterdata = re.findall(pattern,commits)
cleaned_comments = ‘‘.join(filterdata)
# print(‘评论数组‘)
# print(eachCommentList)
# print(‘评论字符串‘)
# print(commits)
# print(‘去除标点符号的评论‘)
# print(cleaned_comments)
# exit()

#在这里使用的是结巴分词,如果没有安装结巴分词,可以在控制台用 pip install jieba安装
segment = jieba.lcut(cleaned_comments)
# print(segment)
# exit()
#可以使用pandas库将分词转化成dataframe格式,head()方法只查看前五项内容
words_df = pd.DataFrame({‘word‘:segment})
# print(words_df)
# print(words_df.head())
# exit()

#可以看到我们的数据中有“我”、“很”等虚词(停用词)
#而这些词在任何场景中都是高频时,并且没有实际含义,所以我们要对他们进行清除
#把停用词放在一个stopwords.txt文件中,将我们的数据与停用词进行对比即可

stopwords=pd.read_csv("stopwords.txt",index_col=False,quoting=3,sep="\t",names=[‘stopword‘],encoding=‘gbk‘)
# print(stopwords)
# exit()
words_df=words_df[~words_df.word.isin(stopwords.stopword)]
# print(words_df.head())
# exit()

#接下来进行词频统计
words_stat=words_df.groupby(by=[‘word‘])[‘word‘].agg([‘count‘])
# print(words_stat.head())

#对统计结果进行排序
words_stat=words_stat.reset_index().sort_values(by=["count"],ascending=False)
# print(words_stat.head())

#词云展示
wordcloud = WordCloud(font_path="simhei.ttf",background_color="white",max_font_size=80)    #指定字体类型、字体大小、背景颜色
word_frequence = {x[0]:x[1] for x in words_stat.head(1000).values}
# print(word_frequence)
wordcloud = wordcloud.fit_words(word_frequence)
# print(wordcloud)
# exit()

#matplotlib包对图片进行绘制,绘制成功后,返回一个AxesImage对象,要在窗口上显示这个对象,我们可以用show()函数进行
#在某些练习环境下可以省略show()函数,也能自动显示出来
plt.imshow(wordcloud)
plt.axis("off")
plt.show()

原文地址:https://www.cnblogs.com/lsm-boke/p/9940326.html

时间: 2024-07-29 23:36:45

爬虫之豆瓣图书评论词云的相关文章

简单爬取《小丑》电影豆瓣短评生成词云

导语  在前段时间看了杰昆菲尼克斯的小丑电影,心里很好奇大部分观众看完这部电影之后对此有什么评价,然后看了看豆瓣短评之后,觉得通过python把短评中出现最多的单词提取出来,做成一张词云,看看这部电影给观众们留下的关键词是什么. 抓取数据  首先刚开始的时候 ,是通过requests去模拟抓取数据,发现短评翻页翻到20页之后就需要登录豆瓣用户才有权限查看,所以打算通过使用selenium模拟浏览器动作自动化将页面中的数据爬取下来,然后存储到特定的txt文件,由于没打算做其他的分析,就不打算存放到

使用爬虫抓取网易云音乐热门评论生成好玩的词云

互联网爬虫是一个很有意思的技术,借由爬虫,我们可以做到很多好玩的事情--这其中就包括爬取评论. 词云就是个更好玩的技术,通过技术方法分析词语出现频率,生成可视化的图形,将文字内容用图形呈现,想想就很意思. 这次,我们就试着把这两个技术结合起来吧. 前言 网易云音乐一直是我向往的"神坛",听音乐看到走心的评论的那一刻,高山流水.于是今天来抓取一下歌曲的热门评论.并做成词云来展示,看看相对于这首歌最让人有感受的评论内容是什么. 做成词云的好处就是直观以及美观, 其他的我也想不出来有什么了.

用Python爬虫对豆瓣《敦刻尔克》影评进行词云展示

最近很想看的一个电影,去知乎上看一下评论,刚好在学Python爬虫,就做个小实例. 代码基于第三方修改 原文链接  http://python.jobbole.com/88325/#comment-94754 #coding:utf-8 from lib2to3.pgen2.grammar import line __author__ = 'hang' import warnings warnings.filterwarnings("ignore") import jieba #分词包

python 爬取豆瓣电影评论,并进行词云展示及出现的问题解决办法

本文旨在提供爬取豆瓣电影<我不是药神>评论和词云展示的代码样例 1.分析URL 2.爬取前10页评论 3.进行词云展示 1.分析URL 我不是药神 短评 第一页url https://movie.douban.com/subject/26752088/comments?start=0&limit=20&sort=new_score&status=P 第二页url https://movie.douban.com/subject/26752088/comments?sta

python爬虫——京东评论、jieba分词、wordcloud词云统计

接上一章,抓取京东评论区内容. url='https://club.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98vv399&productId=4560435&score=0&sortType=5&page=0&pageSize=10&isShadowSku=0&fold=1' 重点是productId--产品id.page--页码.pageSize:指定

抓取网易云音乐歌曲热门评论生成词云

前言 抓数据 抓包分析 加密信息处理 抓取热门评论内容 词云 词云运行效果 总结 前言 网易云音乐一直是我向往的"神坛",听音乐看到走心的评论的那一刻,高山流水.于是今天来抓取一下歌曲的热门评论.并做成词云来展示,看看相对于这首歌最让人有感受的评论内容是什么. 做成词云的好处就是直观以及美观, 其他的我也想不出来有什么了. 抓数据 要想做成词云,首先得有数据才行.于是需要一点点的爬虫技巧. 抓包分析 加密信息处理 抓取热门评论内容 抓包分析 使用Chrome控制台.我们可以轻松的找到评

【python数据挖掘】使用词云分析来分析豆瓣影评数据

概述: 制作词云的步骤: 1.从文件中读取数据 2.根据数据追加在一个字符串里面,然后用jieba分词器将评论分开 3.设置WordCloud词云参数 4.保存最后的结果 数据:使用爬取的豆瓣影评数据 第一步:引入依赖库 # 1.表格库 import csv # 2.jieba分词器 import jieba # 3.算法运算库 import numpy # 4.图像库 from PIL import Image # 5.词云库 from wordcloud import WordCloud 第

python爬虫——豆瓣图书top250信息

# -*- coding: utf-8 -*- import requests import re import sys reload(sys) sys.setdefaultencoding('utf-8') class Spider(object): def __init__(self): print('开始爬取豆瓣图书top250的内容......') # 传入url,返回网页源代码 def getSourceCode(self, url): html = requests.get(url)

爬取网易云音乐评论并使用词云展示

最近听到一首很喜欢的歌,许薇的<我以为>,评论也很有趣,遂有想爬取该歌曲下的所有评论并用词云工具展示. 我们使用chrome开发者工具,发现歌曲的评论都隐藏在以 R_SO_4 开头的 XHR 文件中 接下来思路就很明确,拿到该文件,解析该文件的 json 数据,拿到全部评论. 我们可以看到该文件有两个用JS加密的参数 params 和 encSecKey ,关于这两个加密参数,参考了知乎用户的解答:https://www.zhihu.com/question/36081767 . 步骤: 1.