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 相关文章推荐
wxpython学习笔记(推荐查看)
Jun 09 Python
利用python获取Ping结果示例代码
Jul 06 Python
python django 增删改查操作 数据库Mysql
Jul 27 Python
python 快速把超大txt文件转存为csv的实例
Oct 26 Python
python 使用 requests 模块发送http请求 的方法
Dec 09 Python
解决python写入带有中文的字符到文件错误的问题
Jan 31 Python
利用python开发app实战的方法
Jul 09 Python
python通过http下载文件的方法详解
Jul 26 Python
python实现自动化报表功能(Oracle/plsql/Excel/多线程)
Dec 02 Python
tensorflow 2.1.0 安装与实战教程(CASIA FACE v5)
Jun 30 Python
Python进行特征提取的示例代码
Oct 15 Python
python人工智能human learn绘图可创建机器学习模型
Nov 23 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设计模式 Bridge (桥接模式)
2011/06/26 PHP
浅析ThinkPHP中的pathinfo模式和URL重写
2014/01/06 PHP
PHP检测字符串是否为UTF8编码的常用方法
2014/11/21 PHP
PHP将二维数组某一个字段相同的数组合并起来的方法
2016/02/26 PHP
PHP模拟http请求的方法详解
2016/11/09 PHP
ASP Json Parser修正版
2009/12/06 Javascript
Javascript JSQL,SQL无处不在,
2010/05/05 Javascript
JavaScript var声明变量背后的原理示例解析
2013/10/12 Javascript
js中for in的用法示例解析
2013/12/25 Javascript
JS实现的另类手风琴效果网页内容切换代码
2015/09/08 Javascript
jquery遍历table的tr获取td的值实现方法
2016/05/19 Javascript
js从数组中删除指定值(不是指定位置)的元素实现代码
2016/09/13 Javascript
AngularJS实现Input格式化的方法
2016/11/07 Javascript
Javascript for in的缺陷总结
2017/02/03 Javascript
JavaScript注册时密码强度校验代码
2017/06/30 Javascript
JavaScript变量类型以及变量作用域详解
2017/08/14 Javascript
用Vue写一个分页器的示例代码
2018/04/22 Javascript
JavaScript类数组对象转换为数组对象的方法实例分析
2018/07/24 Javascript
利用React Router4实现的服务端直出渲染(SSR)
2019/01/07 Javascript
javascript实现视频弹幕效果(两个版本)
2019/11/28 Javascript
vue学习笔记之作用域插槽实例分析
2020/02/01 Javascript
Javascript Symbol原理及使用方法解析
2020/10/22 Javascript
基于Vue2实现移动端图片上传、压缩、拖拽排序、拖拽删除功能
2021/01/05 Vue.js
Python实现备份文件实例
2014/09/16 Python
Python制作CSDN免积分下载器
2015/03/10 Python
用Python实现随机森林算法的示例
2017/08/24 Python
python利用递归方法实现求集合的幂集
2020/09/07 Python
基于Jquery和Css3代码制作可以缩放的搜索框
2015/11/19 HTML / CSS
英国领先的葡萄酒专家:Majestic Wine
2017/05/30 全球购物
size?法国官网:英国伦敦的球鞋精品店
2020/03/15 全球购物
总经理职责
2013/12/22 职场文书
社区综治宣传月活动总结
2014/07/02 职场文书
英文辞职信范文
2015/05/13 职场文书
建筑工程催款函
2015/06/24 职场文书
Python实现文本文件拆分写入到多个文本文件的方法
2021/04/18 Python
HTML中的表单Form实现居中效果
2021/05/25 HTML / CSS