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发送arp欺骗攻击代码分析
Jan 16 Python
Python import用法以及与from...import的区别
May 28 Python
django manage.py扩展自定义命令方法
May 27 Python
python 移除字符串尾部的数字方法
Jul 17 Python
python将excel转换为csv的代码方法总结
Jul 03 Python
如何安装并使用conda指令管理python环境
Jul 10 Python
Python:type、object、class与内置类型实例
Dec 25 Python
python单例设计模式实现解析
Jan 07 Python
tensorflow指定GPU与动态分配GPU memory设置
Feb 03 Python
Python反爬虫伪装浏览器进行爬虫
Feb 28 Python
Python中的Cookie模块如何使用
Jun 04 Python
解决运行django程序出错问题 'str'object has no attribute'_meta'
Jul 15 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 写文本日志实现代码
2010/05/18 PHP
php while循环得到循环次数
2013/10/26 PHP
php中mysql连接和基本操作代码(快速测试使用,简单方便)
2014/04/25 PHP
PHP中的gzcompress、gzdeflate、gzencode函数详解
2014/07/29 PHP
php将文本文件转换csv输出的方法
2014/12/31 PHP
php实现简单四则运算器
2020/11/29 PHP
免费空间广告万能消除代码
2006/09/04 Javascript
Hutia 的 JS 代码集
2006/10/24 Javascript
javascript 面向对象 function类
2010/05/13 Javascript
基于jquery实现的上传图片及图片大小验证、图片预览效果代码
2011/04/12 Javascript
jquery的ajaxSubmit()异步上传图片并保存表单数据演示代码
2013/06/04 Javascript
js showModalDialog参数的使用详解
2014/01/07 Javascript
理解Javascript的动态语言特性
2015/06/17 Javascript
jQuery插件ajaxFileUpload使用实例解析
2016/10/19 Javascript
基于javascript的异步编程实例详解
2017/04/10 Javascript
JavaWeb表单及时验证功能在输入后立即验证(含用户类型,性别,爱好...的验证)
2017/06/09 Javascript
jquery ajax加载数据前台渲染方式 不用for遍历的方法
2018/08/09 jQuery
NodeJS搭建HTTP服务器的实现步骤
2018/10/12 NodeJs
vue-cli3+typescript新建一个项目的思路分析
2019/08/06 Javascript
webpack.DefinePlugin与cross-env区别详解
2020/02/23 Javascript
Python 开发Activex组件方法
2009/11/08 Python
黑科技 Python脚本帮你找出微信上删除你好友的人
2016/01/07 Python
Python如何判断数独是否合法
2016/09/08 Python
Python实现的IP端口扫描工具类示例
2019/02/15 Python
关于torch.optim的灵活使用详解(包括重写SGD,加上L1正则)
2020/02/20 Python
python中前缀运算符 *和 **的用法示例详解
2020/05/28 Python
详解Python中如何将数据存储为json格式的文件
2020/11/18 Python
canvas小画板之平滑曲线的实现
2020/08/12 HTML / CSS
彪马荷兰官网:PUMA荷兰
2019/05/08 全球购物
大学生自我鉴定范文模板
2014/01/21 职场文书
社区端午节活动方案
2014/01/28 职场文书
2014年党的群众路线教育实践活动总结
2014/04/25 职场文书
企业年检委托书范本
2014/10/14 职场文书
聚会通知怎么写
2015/04/23 职场文书
职业规划从高考志愿专业选择开始
2019/08/08 职场文书
微软团队与 NASA 科学家和惠普企业(HPE)的工程师合作
2022/04/21 数码科技