专栏名称: 爬虫俱乐部
Stata技术控,编程技术咨询,数据讨论与分享,编程和实证培训。
目录
相关文章推荐
纪念币预约信息  ·  开始预约!国色天香彩色银币,龙头币! ·  20 小时前  
航空工业  ·  中航工业党组领导到相关单位开展调研工作 ·  21 小时前  
纪念币预约信息  ·  蛇钞二次预约号段公布!重点关注这些号码! ·  2 天前  
51好读  ›  专栏  ›  爬虫俱乐部

Python 爬取豆瓣电影评论并生成词云图(二)

爬虫俱乐部  · 公众号  ·  · 2018-06-05 10:11

正文


爬虫俱乐部之前推出的线下培训,得到了各位老师的一致好评。为了更加方便大家学习,满足更多Stata用户的学习需求,爬虫俱乐部已隆重推出在线直播课程,请大家奔走相告!课程报名链接: https://ke.qq.com/course/286526#tuin=9735fd2d ,详情见推文《 爬虫俱乐部隆重推出网上直播课程第一季

有问题,不要怕!点击推文底部“ 阅读原文 ”下载爬虫俱乐部用户问题登记表并按要求填写后发送至邮箱 [email protected] ,我们会及时为您解答哟~

喜大普奔~爬虫俱乐部的github主站正式上线了!我们的网站地址是: https://stata-club.github.io ,粉丝们可以通过该网站访问过去的推文哟~

好消息 :爬虫俱乐部即将推出研究助理供需平台,如果您需要招聘研究助理(Research Assistant or Research Associate),可以将您的需求通过我们的公众号发布;如果您想成为一个RA,可以将您的简历发给我们,进入我们的研究助理数据库。帮我们写优质的推文可以提升您被知名教授雇用的胜算呀!



在上一回的介绍中( Python 爬取豆瓣电影评论并生成词云图(一) ),我们提到了如何获取单页评论,并熟悉了相关库的使用方法,在后面的推文中,我们将介绍获取多页评论、分词以及生成词云图,时不我待,快快开始吧~

获取多页评论

那么我们如何获取多页的评论呢?当然还是循环。

我们可以设定要获取多少页的评论,最后仍返回一个列表。

参数 movie_id 是电影id, page_num 则是我们想要获取的评论页数。

前面我们说过,每页评论只需改变 start 后面的数字即可,所以我们用20*i,然后用str函数将结果转为字符串进行拼接。

Movie_id也进行拼接是为了以后可以只需更改电影id就可以获取不同电影的评论。

将每次循环返回的列表再相加,形成一个大列表 data

最后 return join 函数将内容用空分隔。就相当于最后返回的是一篇文章,所有评论都在里面,便于后续的分词。

def parsepage (movie_id , page_num):

data = []
for i in range (page_num):
url =
"https://movie.douban.com/subject/" + str (movie_id) + "/comments?start=" + str ( 20 * i) + "&limit=20"
data +=onepage(url)
print ( "parsing page %d" % (i+ 1 ))# 提示信息,显示当前正在解析第几页
time.sleep(
6 )# 每解析一页,就暂停 6 秒钟。防止给服务器造成不必要的资源浪费
return " " .join(data)

如图,以下就是返回的结果。


进行分词

接下来,通过jieba中文分词对列表的评论进行分词。

jieba 是基于Python的中文分词工具,安装使用非常方便,直接pip即可:

执行命令安装: pip install jieba

这里是jieba分词的官方网站:

https://github.com/fxsjy/jieba

安装完毕我们导入:

通过上面返回的 data ,我们将data直接传入 jieba lcut 方法。然后就返回了分词结果。

import jieba

all_comments =jieba.lcut(data)

print (all_comments)

我们可以将其打印出来看一下:

可以发现jieba分词已经将评论内容分解为一个一个的单字或词语,并且是一个列表。

因为生成词云图需要的是每个词语之间用空格分隔,所以我们还是用 join 方法,将上面返回的分词结果传入join函数,将其用空格分隔,并存入 words 列表。

words = []
words = " ".join(all_comments)

至此,words就是我们需要生成词云图的文字内容。

现在,我们已经将评论内容的准备工作完成。

生成词云图

激动人心的时刻终于到来!

使用 Wordcloud 库将其生成漂亮的词云图。

同样,使用命令安装: pip install wordcloud

这里是wordcloud的主页:

https://github.com/amueller/word_cloud

可以在这里对wordcloud有个大致了解。

注意:安装期间可能会出现错误:需要VC ++ 库等,此时不要着急。这里给出解决方案:

https://www.lfd.uci.edu/~gohlke/pythonlibs/#wordcloud

打开上面的网址,会跳转到如下界面:根据你的版本进行下载。

下载下来后,打开命令行( cmd ),转到文件所在路径,使用命令进行安装:

pip install wordcloud-1.4.1-cp36-cp36m-win32.whl

install 后面的文件名根据你的下载版本替换(tab键自动补全)

安装完就可以正常使用啦。

导入Wordcloud库,使用wordcloud的WordCloud方法,注意 首字母大写 ,进行初始化设置:

其中, width 是图片宽度, height 是图片高度, background_color 是背景颜色, font_path 是字体文件路径(例子中的文件是微软雅黑字体,如果不加字体可能会出现无法显示中文的情况)。然后通过generate方法生成词云图。参数就是上面的words。

import wordcloud
wc=wordcloud.WordCloud(width=1500,height=1500,background_color="white",font_path="./msyh.ttc")
wc.generate(words)

还剩最后一步:

保存文件:通过 to_file() 方法将文件存储到本地。参数就是文件名。

wc.to_file( "image.jpg" )

如何找到字体文件:

C:\Windows\Fonts 路径下存储的是字体文件。找到

将其复制出来,放到你所编辑的py文件的相同目录。同样,保存的图片也是这个路径。

至此,这个生成词云图的小程序就结束啦!可能写的比较啰嗦,不是非常详细,不过只要你跟着做一遍,肯定会有很多收获。多做两次,你也会做词云图。


本程序所在环境:

Python3.6

库: requests/ BeautifulSoup / wordcloud / jieba/ time

以下是完整代码:

#导入所需库
import requests
from bs4 import BeautifulSoup
import wordcloud
import jieba
import time
#电影id
movie_id =24773958

#获取单页的评论,返回评论列表
def onepage(url):
   r = requests.get(url)
   r.encoding = "utf-8"
   html = r.text
   soup = BeautifulSoup(html,"html.parser")
   comments_sec = soup.find("div","mod-bd")
   comments_list =comments_sec.find_all("p", "")
   lst = []
   for i in range(len(comments_list)):
      lst.append(comments_list[i].text.strip())

   return lst

#获取多页评论,返回总列表
def parsepage(movie_id, page_num):
   data = []
   for i in range(page_num):
       url ="https://movie.douban.com/subject/" + str(movie_id) +"/comments?start=" + str(20 * i) + "&limit=20"
       data += onepage(url)
       print("parsing page %d" %(i+1))
       time.sleep(6)#每隔6秒爬取一页,豆瓣默认5秒,太频繁了不好哦

   return "".join(data)


def main():
   data = parsepage(movie_id, 10)#10为要爬取的页数
   all_comments = jieba.lcut(data)
   words = " ".join(all_comments)
   print("正在生成词云图……")
   wc=wordcloud.WordCloud(width=1500,height=1500,background_color="white",font_path="./msyh.ttc")
   wc.generate(words)
   wc.to_file("image.jpg")
   print("ok")

main()

效果图(实际效果可能和下图不同,颜色是每次随机改变的):


一起来试试吧~~


注:此推文中的图片及封面(除操作部分的)均来源于网络!如有雷同,纯属巧合!

以上就是今天给大家分享的内容了,说得好就赏个铜板呗!有钱的捧个钱场,有人的捧个人场~。 另外,我们开通了苹果手机打赏通道,只要扫描下方的二维码,就可以打赏啦!

应广大粉丝要求,爬虫俱乐部的推文公众号打赏功能可以开发票啦,累计打赏超过1000元我们即可给您开具发票,发票类别为“咨询费”。用心做事,只为做您更贴心的小爬虫。第一批发票已经寄到各位小主的手中,大家快来给小爬虫打赏呀~




文字编辑:赵宇亮

技术总编:刘贝贝

往期推文推荐:

1.爬虫俱乐部新版块--和我们一起学习Python

2.hello,MySQL--Stata连接MySQL数据库

3.hello,MySQL--odbcload读取MySQL数据

4.再爬俱乐部网站,推文目录大放送!

5.用Stata生成二维码—我的心思你来扫

6. Mata中的数据导出至Excel







请到「今天看啥」查看全文