Python爬取你好李焕英豆瓣短评生成词云的示例代码


Posted in Python onFebruary 24, 2021

爬取过程:

你好,李焕英 短评的URL:

https://movie.douban.com/subject/34841067/comments?start=20&limit=20&status=P&sort=new_score

Python爬取你好李焕英豆瓣短评生成词云的示例代码

分析要爬取的URL;
34841067:电影ID
start=20:开始页面
limit=20:每页评论条数

代码:

url = 'https://movie.douban.com/subject/%s/comments?start=%s&limit=20&sort=new_score&status=P % (movie_id, (i - 1) * 20)

在谷歌浏览器中按F12进入开发者调试模式,查看源代码,找到短评的代码位置,查看位于哪个div,哪个标签下:

Python爬取你好李焕英豆瓣短评生成词云的示例代码

可以看到评论在div[id=‘comments']下的div[class=‘comment-item']中的第一个span[class=‘short']中,使用正则表达式提取短评内容,即代码为:

url = 'https://movie.douban.com/subject/%s/comments?start=%s&limit=20&sort=new_score&status=P' \
     % (movie_id, (i - 1) * 20)

   req = requests.get(url, headers=headers)
   req.encoding = 'utf-8'
   comments = re.findall('<span class="short">(.*)</span>', req.text)

背景图:

Python爬取你好李焕英豆瓣短评生成词云的示例代码

生成的词云:

Python爬取你好李焕英豆瓣短评生成词云的示例代码

完整代码:

import re
from PIL import Image
import requests
import jieba
import matplotlib.pyplot as plt
import numpy as np

from os import path

from wordcloud import WordCloud, STOPWORDS

headers = {
  'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:64.0) Gecko/20100101 Firefox/64.0'
}

d = path.dirname(__file__)

def spider_comment(movie_id, page):
 """
 爬取评论
 :param movie_id: 电影ID
 :param page: 爬取前N页
 :return: 评论内容
 """
 comment_list = []
 for i in range(page):
  url = 'https://movie.douban.com/subject/%s/comments?start=%s&limit=20&sort=new_score&status=P&percent_type=' \
    % (movie_id, (i - 1) * 20)

  req = requests.get(url, headers=headers)
  req.encoding = 'utf-8'
  comment_list = re.findall('<span class="short">(.*)</span>', req.text)


  print("当前页数:%s,总评论数:%s" % (i, len(comment_list)))

 return comment_list

def wordcloud(comment_list):

 wordlist = jieba.lcut(' '.join(comment_list))
 text = ' '.join(wordlist)

 print(text)

 # 调用包PIL中的open方法,读取图片文件,通过numpy中的array方法生成数组
 backgroud_Image = np.array(Image.open(path.join(d, "wordcloud.png")))

 wordcloud = WordCloud(
  font_path="simsun.ttc",
  background_color="white",

  mask=backgroud_Image, # 设置背景图片
  stopwords=STOPWORDS,
  width=2852,
  height=2031,
  margin=2,
  max_words=6000, # 设置最大显示的字数
  #stopwords={'企业'}, # 设置停用词,停用词则不再词云图中表示
  max_font_size=250, # 设置字体最大值
  random_state=1, # 设置有多少种随机生成状态,即有多少种配色方案
  scale=1) # 设置生成的词云图的大小

 # 传入需画词云图的文本
 wordcloud.generate(text)

 wordcloud.to_image()
 wordcloud.to_file("cloud.png")

 plt.imshow(wordcloud)
 plt.axis("off")
 plt.show()

# 主函数
if __name__ == '__main__':
 movie_id = '34841067'
 page = 11
 comment_list = spider_comment(movie_id, page)
 wordcloud(comment_list)

WordCloud各含义参数如下:

font_path : string #字体路径,需要展现什么字体就把该字体路径+后缀名写上,如:font_path = '黑体.ttf'

width : int (default=400) #输出的画布宽度,默认为400像素

height : int (default=200) #输出的画布高度,默认为200像素

prefer_horizontal : float (default=0.90) #词语水平方向排版出现的频率,默认 0.9 (所以词语垂直方向排版出现频率为 0.1 )

mask : nd-array or None (default=None) #如果参数为空,则使用二维遮罩绘制词云。如果 mask 非空,设置的宽高值将被忽略,遮罩形状被 mask 取代。除全白(#FFFFFF)的部分将不会绘制,其余部分会用于绘制词云。如:bg_pic = imread('读取一张图片.png'),背景图片的画布一定要设置为白色(#FFFFFF),然后显示的形状为不是白色的其他颜色。可以用ps工具将自己要显示的形状复制到一个纯白色的画布上再保存,就ok了。

scale : float (default=1) #按照比例进行放大画布,如设置为1.5,则长和宽都是原来画布的1.5倍

min_font_size : int (default=4) #显示的最小的字体大小

font_step : int (default=1) #字体步长,如果步长大于1,会加快运算但是可能导致结果出现较大的误差

max_words : number (default=200) #要显示的词的最大个数

stopwords : set of strings or None #设置需要屏蔽的词,如果为空,则使用内置的STOPWORDS

background_color : color value (default=”black”) #背景颜色,如background_color='white',背景颜色为白色

max_font_size : int or None (default=None) #显示的最大的字体大小

mode : string (default=”RGB”) #当参数为“RGBA”并且background_color不为空时,背景为透明

relative_scaling : float (default=.5) #词频和字体大小的关联性

color_func : callable, default=None #生成新颜色的函数,如果为空,则使用 self.color_func

regexp : string or None (optional) #使用正则表达式分隔输入的文本

collocations : bool, default=True #是否包括两个词的搭配

colormap : string or matplotlib colormap, default=”viridis” #给每个单词随机分配颜色,若指定color_func,则忽略该方法

random_state : int or None #为每个单词返回一个PIL颜色


fit_words(frequencies) #根据词频生成词云
generate(text) #根据文本生成词云
generate_from_frequencies(frequencies[, ...]) #根据词频生成词云
generate_from_text(text) #根据文本生成词云
process_text(text) #将长文本分词并去除屏蔽词(此处指英语,中文分词还是需要自己用别的库先行实现,使用上面的 fit_words(frequencies) )
recolor([random_state, color_func, colormap]) #对现有输出重新着色。重新上色会比重新生成整个词云快很多
to_array() #转化为 numpy array
to_file(filename) #输出到文件

到此这篇关于Python爬取你好李焕英豆瓣短评生成词云的文章就介绍到这了,更多相关Python爬取豆瓣短评内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
使用python实现拉钩网上的FizzBuzzWhizz问题示例
May 05 Python
Python导入模块时遇到的错误分析
Aug 30 Python
在python3.5中使用OpenCV的实例讲解
Apr 02 Python
使用Python设计一个代码统计工具
Apr 04 Python
Selenium 模拟浏览器动态加载页面的实现方法
May 16 Python
Python使用Selenium爬取淘宝异步加载的数据方法
Dec 17 Python
Django数据库连接丢失问题的解决方法
Dec 29 Python
Python使用matplotlib绘制三维参数曲线操作示例
Sep 10 Python
pytorch模型预测结果与ndarray互转方式
Jan 15 Python
Python实现计算长方形面积(带参数函数demo)
Jan 18 Python
如何让python的运行速度得到提升
Jul 08 Python
Python基础之赋值,浅拷贝,深拷贝的区别
Apr 30 Python
用pip给python安装matplotlib库的详细教程
Feb 24 #Python
matplotlib 范围选区(SpanSelector)的使用
Feb 24 #Python
matplotlib之多边形选区(PolygonSelector)的使用
Feb 24 #Python
matplotlib部件之套索Lasso的使用
Feb 24 #Python
matplotlib之属性组合包(cycler)的使用
Feb 24 #Python
matplotlib bar()实现百分比堆积柱状图
Feb 24 #Python
matplotlib bar()实现多组数据并列柱状图通用简便创建方法
Feb 24 #Python
You might like
基于PHP服务端图片生成缩略图的方法详解
2013/06/20 PHP
PHP准确取得服务器IP地址的方法
2015/06/02 PHP
PHP基于yii框架实现生成ICO图标
2015/11/13 PHP
基于PHP实现栈数据结构和括号匹配算法示例
2017/08/10 PHP
laravel返回统一格式错误码问题
2019/11/04 PHP
让任务管理器中的CPU跳舞的js代码
2008/11/01 Javascript
node.js中的fs.readdir方法使用说明
2014/12/17 Javascript
window.onload与$(document).ready()的区别分析
2015/05/30 Javascript
js实现匹配时换色的输入提示特效代码
2015/08/17 Javascript
Javascript设计模式之观察者模式(推荐)
2016/03/29 Javascript
js获取Html元素的实际宽度高度的方法
2016/05/19 Javascript
基于JavaScript实现单选框下拉菜单添加文件效果
2016/06/26 Javascript
解决OneThink中无法异步提交kindeditor文本框中修改后的内容方法
2017/05/05 Javascript
在 Typescript 中使用可被复用的 Vue Mixin功能
2018/04/17 Javascript
微信小程序网络封装(简单高效)
2018/08/06 Javascript
详解React之key的使用和实践
2018/09/29 Javascript
小程序实现五星点评效果
2018/11/03 Javascript
基于webpack4.X从零搭建React脚手架的方法步骤
2018/12/23 Javascript
jQuery实现模拟搜索引擎的智能提示功能简单示例
2019/01/27 jQuery
详解使用uni-app开发微信小程序之登录模块
2019/05/09 Javascript
使用Layui搭建后台管理界面的操作方法
2019/09/20 Javascript
[01:33]DOTA2上海特级锦标赛 LIQUID战队完整宣传片
2016/03/16 DOTA
netbeans7安装python插件的方法图解
2013/12/24 Python
python多线程用法实例详解
2015/01/15 Python
Python中的赋值、浅拷贝、深拷贝介绍
2015/03/09 Python
Python中new方法的详解
2019/01/15 Python
解决pycharm中opencv-python导入cv2后无法自动补全的问题(不用作任何文件上的修改)
2020/03/05 Python
css3实现针线缝合效果(图解步骤)
2013/02/04 HTML / CSS
Sasa莎莎海外旗舰店:香港莎莎美妆平台
2018/03/21 全球购物
爱护公共设施倡议书
2014/08/29 职场文书
学雷锋日活动总结
2015/02/06 职场文书
资金申请报告范文
2015/05/14 职场文书
2015年保险业务员工作总结
2015/05/27 职场文书
六年级作文之预言作文
2019/10/25 职场文书
php7中停止php-fpm服务的方法详解
2021/05/09 PHP
MySQL 百万级数据的4种查询优化方式
2021/06/07 MySQL