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网络编程学习笔记(五):socket的一些补充
Jun 09 Python
简单介绍Python中的JSON使用
Apr 28 Python
python虚拟环境virualenv的安装与使用
Dec 18 Python
python dataframe astype 字段类型转换方法
Apr 11 Python
解决python3 Pycharm上连接数据库时报错的问题
Dec 03 Python
通过cmd进入python的实例操作
Jun 26 Python
Python字典底层实现原理详解
Dec 18 Python
Python字符串、列表、元组、字典、集合的补充实例详解
Dec 20 Python
Django-xadmin后台导入json数据及后台显示信息图标和主题更改方式
Mar 11 Python
python新式类和经典类的区别实例分析
Mar 23 Python
jupyter notebook 重装教程
Apr 16 Python
Python 通过正则表达式快速获取电影的下载地址
Aug 17 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+MySQL的聊天室设计
2006/10/09 PHP
PHP 和 MySQL 基础教程(三)
2006/10/09 PHP
简单的php 验证图片生成函数
2009/05/21 PHP
浅析Dos下运行php.exe,出现没有找到php_mbstring.dll 错误的解决方法
2013/06/29 PHP
php自定义hash函数实例
2015/05/05 PHP
PHP生成各种常见验证码和Ajax验证过程
2016/01/10 PHP
laravel框架select2多选插件初始化默认选中项操作示例
2020/02/18 PHP
详解phpstorm2020最新破解方法
2020/09/17 PHP
js中方法重载如何实现?以及函数的参数问题
2013/08/01 Javascript
前台js调用后台方法示例
2013/12/02 Javascript
jQuery中closest()函数用法实例
2015/01/07 Javascript
jQuery插件slick实现响应式移动端幻灯片图片切换特效
2015/04/12 Javascript
javascript中eval函数用法分析
2015/04/25 Javascript
jQuery仿天猫实现超炫的加入购物车
2015/05/04 Javascript
Bootstrap富文本组件wysiwyg数据保存到mysql的方法
2016/05/09 Javascript
jQuery之动画ajax事件(实例讲解)
2017/07/18 jQuery
javascript修改浏览器title方法 JS动态修改浏览器标题
2017/11/30 Javascript
使用typescript开发angular模块并发布npm包
2018/04/19 Javascript
vue-cli项目根据线上环境分别打出测试包和生产包
2018/05/23 Javascript
深入理解NodeJS 多进程和集群
2018/10/17 NodeJs
javascript设计模式 ? 装饰模式原理与应用实例分析
2020/04/14 Javascript
JS脚本实现定时到网站上签到/签退功能
2020/04/22 Javascript
Element Collapse 折叠面板的使用方法
2020/07/26 Javascript
[46:04]Liquid vs VP Supermajor决赛 BO 第四场 6.10
2018/07/05 DOTA
Python设计模式之工厂模式简单示例
2018/01/09 Python
python+matplotlib绘制旋转椭圆实例代码
2018/01/12 Python
详解Numpy中的广播原则/机制
2018/09/20 Python
Python sep参数使用方法详解
2020/02/12 Python
html5使用canvas实现图片下载功能的示例代码
2017/08/26 HTML / CSS
德国户外商店:eXXpozed
2020/07/25 全球购物
电气自动化个人求职信范文
2014/02/03 职场文书
秦始皇兵马俑导游词
2015/02/02 职场文书
学校少先队工作总结
2015/08/12 职场文书
小学生反邪教心得体会
2016/01/15 职场文书
Python 游戏大作炫酷机甲闯关游戏爆肝数千行代码实现案例进阶
2021/10/16 Python
从结婚开始的恋爱故事。小说《我的美好婚事》TV动画化决定
2022/04/07 日漫