爬取豆瓣电影《大侦探皮卡丘》的影评,并做词云图和关键词绘图
第一步:找到评论的网页url。
https://movie.douban.com/subject/26835471/comments?start=0&limit=20&sort=new_score&status=P
第二步:鼠标放在评论上右键检查,分析源代码,确定抓取的内容。

 <span class="short">萌就行了!这个世界观感觉梦想成真了!</span>

如上,只要抓取该标签下的文本就好,这里可以用正则表达式,里面的文本内容用(.*?)抓取。

第三步:观察分页情况。
点击下一页,发现链接变为:
https://movie.douban.com/subject/26835471/comments?start=20&limit=20&sort=new_score&status=P
发现只有start=后面的数字改变,每页20条评论,每页*20即可

导入模块

这些模块可在cmd下输入pip install 模块名,或者pycharm中setting-Project Interpreter里右边的+号安装

import requests
import re
from wordcloud import WordCloud
import jieba
from PIL import Image
import jieba.analys
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl

1、用requests获取url

因为爬虫次数较多可能IP被封,所以找了个代理IP,参数里习惯性加上headers伪装成浏览器访问。

def getHtml(url):# 获取url页面headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.67 Safari/537.36'}proxies = {'http': '61.135.217.7:80'}response = requests.get(url, headers=headers, proxies=proxies)response.encoding = 'utf-8'return response.text

2、用正则解析网页,提取文本,返回评论列表

def getComment(url):# 用正则提取评论文本,返回一个列表html = getHtml(url) #调用上一个函数comments = re.findall('<span class="short">(.*?)</span>', html, re.S)  # re.S记得加上,空字符串onepageComments = []  # 创建一个空列表,存放评论#用正则表达式解析出来的是一个列表,遍历列表,将每一个评论取出,添加到空列表里,每个评论后面换行for i in comments:onepageComments.append(i + '\n')return onepageComments

3、分页、函数回调,写入本地文件

if __name__ == '__main__':f = open(r'大侦探皮卡丘部分影评.txt', 'w', encoding='utf-8')#这里抓取10页内容,如果太多页可能需要登录豆瓣账号,然后在requests.get参数中增加一个cookies参数即可浏览后面的评论for page in range(10):url = 'https://movie.douban.com/subject/26835471/comments?start=' + str(20 * page) + '&limit=20&sort=new_score&status=P'  # 分页# print('第%s页的评论:' % (page+1))  #这里可以知道正在爬取的是第几页的评论,方便自己核对for i in getComment(url):f.write(i)  # 将每一页评论都写入本地文件中
#   print(i)  # 打印所有评论
# print('\n')  # 每页换行

4、词云图

先将抓取的文件打开,注意编码

comments = open('大侦探皮卡丘部分影评.txt', 'r', encoding='utf-8').read()

以下词云图分几种情况,都可以尝试跑一遍看看效果,最全面的可以直接看第3小点。

4.1 如果不分词

wc = WordCloud(background_color='white',  # 设置背景颜色font_path="C:\Windows\Fonts\msyh.ttf",  # 设置中文字体max_font_size=60,  # 设置字体最大值random_state=30,  # 设置有多少种随机生成状态,即有多少种配色方案width=800,height=600).generate(comments)  # 生成词云
# 展示词云图
plt.figure(figsize=(20, 10)) #设置画布大小
plt.imshow(wc, interpolation='bilinear')
plt.axis("off") #去掉坐标轴
plt.show()

4.2 jieba分词

wordlist = jieba.cut(str(comments), cut_all=False) #精确模式
wl = " ".join(wordlist)
wc = WordCloud(background_color='white',  # 设置背景颜色font_path="C:\Windows\Fonts\msyh.ttf",  # 设置中文字体max_font_size=60,  # 设置字体最大值random_state=30,  # 设置有多少种随机生成状态,即有多少种配色方案width=800,height=600).generate(wl)  # 注意这里面的参数是wl
# 展示词云图
plt.figure(figsize=(20, 10)) #设置画布大小
plt.imshow(wc, interpolation='bilinear')
plt.axis("off") #去掉坐标轴
plt.show()

4.3 结巴分词,加上萌图,去停用词,并保存图片

相关的模块要导进来
这里有一个哈工大停用词表,可自行网上下载
然后下载一张词云用的背景图(我这里是pikaqiu.png,一张皮卡丘的图)

wordlist = jieba.cut(str(comments), cut_all=False) #精确模式
wl = " ".join(wordlist)
# 设置背景图
mask = np.array(Image.open('pikaqiu.png', 'r'))
# 设置停用词
stopwords_file = open('哈工大停用词表.txt', 'r')
stopwords = [words.strip() for words in stopwords_file.readlines()]
# 设置词云(里面多加了几个参数)
wc = WordCloud(background_color='white',  # 设置背景颜色mask=mask,  # 设置背景图片max_words=2000,  # 设置最大词数stopwords=stopwords,  # 设置停用词font_path="C:\Windows\Fonts\msyh.ttf",  # 设置中文字体max_font_size=60,  # 设置字体最大值random_state=30,  # 设置有多少种随机生成状态,即有多少种配色方案width=600,height=800).generate(wl)  # 生成词云# 展示词云图
plt.figure(figsize=(8, 6)) #设置画布大小
plt.imshow(wc, interpolation='bilinear')
plt.axis("off") #去掉坐标轴
plt.show()
wc.to_file('result.jpg')  #存为图片

到这里基本就完成了

5、取前20个评论关键词

# withWeight=True一并返回关键词、权重值
keywords = jieba.analyse.extract_tags(comments, topK=20, withWeight=True, allowPOS=("n", "v"))  # 指定名词和动词# 变成dataframe格式
comm = pd.DataFrame(keywords)
for item in keywords:print(item[0], item[1])# 设置画布大小
plt.figure(figsize=(10, 8))
#显示中文
mpl.rcParams['font.sans-serif'] = ['SimHei']
# 画图
plt.bar(comm[0], comm[1], color="c")
# 设置标签,标题,调整大小
plt.xlabel('词语', fontsize=20)
plt.ylabel('权重', fontsize=20)
plt.title('评论词频', fontsize=20)
plt.tick_params(labelsize=10)
# 在每个直条上加标签
for a, b in zip(comm[0], comm[1]):plt.text(a, b, '%.2f' % b, ha='center', va='bottom', fontsize=10)
plt.show()

[超详细] Python3爬取豆瓣影评、去停用词、词云图、评论关键词绘图处理相关推荐

  1. 利用Requests库和正则表达式爬取豆瓣影评Top250

    说明 最近看了下爬虫基础,想写个博客来记录一下,一来是可以方便和我一样刚入门的小白来参考学习,二来也当做自己的笔记供自己以后查阅. 本文章是利用python3.6和Requests库(需自行安装,cm ...

  2. python爬取豆瓣影评生成词云的课程设计报告_Python爬取豆瓣影评,生成词云图,只要简单一步即可实现。...

    最近看了一部电影<绣春刀>,里面的剧情感觉还不错,本文爬取的是绣春刀电影的豆瓣影评,1000个用户的短评,共5W多字.用jieba分词,对词语的出现频率进行统计,再通过wordcloud生 ...

  3. 用python爬取豆瓣影评及影片信息(评论时间、用户ID、评论内容)

    爬虫入门:python爬取豆瓣影评及影片信息:影片评分.评论时间.用户ID.评论内容 思路分析 元素定位 完整代码 豆瓣网作为比较官方的电影评价网站,有很多对新上映影片的评价,不多说,直接进入正题. ...

  4. 爬虫实战2(上):爬取豆瓣影评

       这次我们将主要尝试利用python+requsets模拟登录豆瓣爬取复仇者联盟4影评,首先让我们了解一些模拟登录相关知识补充.本文结构如下: request模块介绍与安装 get与post方式介 ...

  5. python爬取豆瓣影评_【python爬虫实战】爬取豆瓣影评数据

    概述: 爬取豆瓣影评数据步骤: 1.获取网页请求 2.解析获取的网页 3.提速数据 4.保存文件 源代码: # 1.导入需要的库 import urllib.request from bs4 impo ...

  6. #私藏项目实操分享#Python爬虫实战,requests+xpath模块,Python实现爬取豆瓣影评

    前言 利用利用requests+xpath爬取豆瓣影评,废话不多说. 让我们愉快地开始吧~ 开发工具 Python版本:3.6.4 相关模块: requests模块: jieba模块: pandas模 ...

  7. Python爬虫实战,requests+xpath模块,Python实现爬取豆瓣影评

    前言 利用利用requests+xpath爬取豆瓣影评,废话不多说. 让我们愉快地开始吧~ 开发工具 **Python版本:**3.6.4 相关模块: requests模块: jieba模块: pan ...

  8. 朴素贝叶斯情感分析评分python_「豆瓣影评」从爬取豆瓣影评到基于朴素贝叶斯的电影评论情感分析(上) - seo实验室...

    豆瓣影评 一.爬取豆瓣影评 基本思路:先获取每个电影的评论区链接,然后依次进入其评论区爬取评论.选取10部电影,每部200条评论. 用到的包为:BeautifulSoup,urllib 这里选取的链接 ...

  9. 从爬取豆瓣影评到基于朴素贝叶斯的电影评论情感分析(上)

    一.爬取豆瓣影评 基本思路:先获取每个电影的评论区链接,然后依次进入其评论区爬取评论.选取10部电影,每部200条评论. 用到的包为:BeautifulSoup,urllib 这里选取的链接为:豆瓣电 ...

最新文章

  1. 深入Atlas系列:客户端网络访问基础结构示例(1) - 编写并使用自定义的WebRequestExecutor...
  2. 最小二乘法least square
  3. Js+Css打造的红色经典伸缩菜单代码
  4. 天地图之定位信息详解
  5. 帕斯卡命名法 pascal命名法
  6. 英特尔核芯显卡控制面板没有了_只认性能你就输了!英特尔第十代酷睿处理器最全解析...
  7. 四.Windows I/O模型之重叠IO(overlapped)模型
  8. 搞定这个月薪50K的AI热门领域,看这9本书就够了
  9. rabbitmq充分利mysql_牛逼哄哄的 RabbitMQ 到底有啥用?
  10. yolov5训练自己的数据集(一文搞定训练)
  11. 同余运算及其基本性质(证明)
  12. 【深入理解JVM】运行时数据区域:java虚拟机栈
  13. 云之讯 亿美 短信的三方接口
  14. 简易计算机系统综合设计设计报告(VHDL)
  15. HCIPHCIE【2019-4月-更新增加新题】221 65道新题
  16. 深圳立仪发布纳米级高分辨率光谱共焦位移传感器,精度再破纪录
  17. 为谷歌浏览器Chrome安装鼠标手势插件
  18. linux查询网络连接状态,Linux 查看网络连接状态
  19. PHP 使用用户排队机制解决网站大访问量的例子
  20. 台式电脑怎么添加计算机硬盘,台式机如何添加硬盘|台式机添加硬盘的方法

热门文章

  1. 【RS】报文的分类和标记
  2. 教师学python有优势吗_学Python有意义吗 就业前景如何
  3. 第二季第二集(昨天没有写博客)
  4. Graph Neural Networks in Recommender Systems综述
  5. Good-Turning Smoothing介绍及推理
  6. [STM8L]TAB段式LCD液晶驱动程序
  7. 仰望易四方背后的秘密,比亚迪如何玩转技术品牌?
  8. 图文讲解如何使用Gmail绑定域名开通企业邮箱(使用时代互联的域名管理后台)
  9. 区块链技术在金融领域应用发展情况
  10. 一个屌丝程序猿的人生(一百一十九)