使用Python爬取豆瓣短评并绘制词云


成果如下(比较丑,凑合看)

1.分析网页

打开想要爬取的电影,比如《找到你》,其短评如下:

查看源代码

发现短评存放在<span>标签里 并且class为short,所以通过爬取其里边的内容即可

并且通过翻页发现:url改变的仅仅为start,每次翻页增加20,所以只需for循环增加数字即可控制页数



2.获取其网页内容

我们使用bs4以及requests模块进行获取,并使用多线程加快爬取速度

import threadingimport requests
from bs4 import  BeautifulSoup
# #      1). 爬取某一页的评论信息;
def getOnePageComment(id, pageNum):# 1). 根据页数确定start变量的值# 第一页: https://movie.douban.com/subject/26425063/comments?start=0&limit=20&sort=new_score&status=P# 第二页: https://movie.douban.com/subject/26425063/comments?start=20&limit=20&sort=new_score&status=P# 第三页: https://movie.douban.com/subject/26425063/comments?start=20&limit=40&sort=new_score&status=Pstart = (pageNum-1)*20url = "https://movie.douban.com/subject/%s/comments?start=%s&limit=20&sort=new_score&status=P" %(id, start)# 2). 爬取评论信息的网页内容content = requests.get(url).text# 3). 通过bs4分析网页soup = BeautifulSoup(content, 'lxml')# 分析网页得知, 所有的评论信息都是在span标签, 并且class为short;commentsList = soup.find_all('span', class_='short')pageComments = ""# 依次遍历每一个span标签, 获取标签里面的评论信息, 并将所有的评论信息存储到pageComments变量中;for commentTag in commentsList:pageComments += commentTag.text# return pageCommentsprint("%s page" %(pageNum))global  commentscomments += pageComments#      2).爬取某个电影的前10页评论信息;
id = '27140071'
comments = ''
threads = []
# 爬取前10页的评论信息;获取前几页就循环几次;
for pageNum in range(10): # 0 , 1 2 3 4...9pageNum = pageNum + 1# getOnePageComment(id, pageNum)# 通过启动多线程获取每页评论信息t = threading.Thread(target=getOnePageComment, args=(id, pageNum))threads.append(t)t.start()
#     等待所有的子线程执行结束, 再执行主线程内容;
_ = [thread.join() for thread in threads]
print("执行结束")
with open("%s.txt" %(id), 'w') as f:f.write(comments)

成果如下


3.数据清洗

对于爬取的评论信息进行数据清洗(删除不必要的逗号, 句号, 表情, 只留下中文或者英文内容)
在此使用re模块使用正则表达式进行数据清洗

with open('找到你.txt','a+') as f:comments = f.read()print(comments)# 通过正则表达式实现pattern = re.compile(r'([\u4e00-\u9fa5]+|[a-zA-Z]+)')deal_comments = re.findall(pattern, comments)newComments = ''print(newComments)for item in deal_comments:newComments += itemprint(newComments)f.write(newComments)

4.制作词云

通过jiaba(通过词库切割中文)、wordcloud(制作词云)模块实现

import jieba
import  wordcloud
import  numpy as np
# 在python2中处理图像,Image; python3中如果处理图像, 千万不要安装Image, 安装pillow
from PIL import Image# 1). 切割中文, lcut返回一个列表, cut返回一个生成器;
result = jieba.lcut(open('找到你.txt').read())# 2). 打开图片
imageObj = Image.open('./doc/mao.jpg')
cloud_mask = np.array(imageObj)# 4). 绘制词云
wc = wordcloud.WordCloud(mask = cloud_mask,background_color='black',font_path='./font/msyh.ttf',    # 处理中文数据时min_font_size=5,    # 图片中最小字体大小;max_font_size=50,   # 图片中最大字体大小;width=500,  # 指定生成图片的宽度
)
wc.generate(",".join(result))
wc.to_file('找到你.png')

(效果如图,背景大家可以找点自己喜欢的)

详解使用Python爬取豆瓣短评并绘制词云相关推荐

  1. 爬取豆瓣短评并输出词云

    说明: 爬取豆瓣电影,书籍,音乐(可选择)的所有短评信息,最终筛选出现频率最高的100词生成词云.但是我这个写的有点问题是,在挂代理ip测试时把豆瓣账号永久封禁,造成了电影短评无法全部获取,但书籍,和 ...

  2. Python - 爬取豆瓣短评评论

    Python - 爬取豆瓣短评评论 import requests from bs4 import BeautifulSoup import re import time# 保存豆瓣评分 source ...

  3. python爬取豆瓣短评_Python爬取豆瓣指定书籍的短评

    Python爬取豆瓣指定书籍的短评 #!/usr/bin/python # coding=utf-8 import re import sys import time import random im ...

  4. python爬取豆瓣短评_爬取并简单分析豆瓣电影短评

    导语 利用Python爬取并简单分析豆瓣电影短评. 说起来挺逗的,去年爬豆瓣短评的时候还是可以爬个几万条数据的,昨天我还想着终于可以起个唬人的标题了,什么爬取了xxx电影的xxx万条数据. 于是昨晚写 ...

  5. python爬取豆瓣短评_爬虫-爬取豆瓣短评

    爬虫-爬取豆瓣短评 啥是爬虫? ​按照一定的规则,自动地抓取互联网信息的程序. 为啥要用爬虫? ​可以利用爬虫自动地采集互联网中的信息,采集回来后进行相应的存储或处理,在需要检索某些信息的时候,只需在 ...

  6. python爬取豆瓣短评,提取出现最多的词语

    文章目录 前言 关于项目 博客结构 项目简介 用到的库 自己的工具类 相关配置 效果展示 过程简述 全局变量 main方法 get_id方法 get_comments方法 步骤详解 获取主键 请求阶段 ...

  7. [转载]Python爬取豆瓣影评并生成词云图代码

    # -*- coding:utf-8 -*- ''' 抓取豆瓣电影某部电影的评论 这里以<我不是潘金莲为例> 网址链接:https://movie.douban.com/subject/2 ...

  8. 实例:爬取豆瓣评论、绘制词云图以及情感分析——以《长津湖》为例

    一.爬取豆瓣<长津湖>网页评论 (由于存在一定的反爬机制,以下代码最多只能爬取210条评论) # 导入工具包 import requests from bs4 import Beautif ...

  9. python爬虫网站 词云_Python爬虫之爬取情话网站并绘制词云

    一.爬取网站 1.分析目标网站 首先我们需要分析目标网站的源代码 分析html得知所有的情话都是在标签 下,而且一个 标签对应着一句情话. 2.编写代码 import bs4 import reque ...

最新文章

  1. 公司用的 MySQL 团队开发规范,非常详细,建议收藏!
  2. 大数据处理系列之(一)Java线程池使用
  3. C语言标准字符char和字符串string
  4. 【Idea解法】Failed to execute goal on project : Could not resolve dependencies for pro
  5. python爬虫第二课:url解析
  6. Linux驱动(8)--内核编译与配置
  7. VS2010 字体和背景设置
  8. 陈年佳酿之 - Winform ListView 控件 double click 事件中获取选中的row与column
  9. 实战tkinter图形界面开发_八款常用的 Python GUI 开发框架推荐
  10. 到底啥是平台,到底啥是中台?李鬼太多,不得不说
  11. mysql 5.6 默认密码_mysql5.6配置及修改密码
  12. Python3自动生成MySQL数据字典的markdown文本的实现
  13. java学生成绩管理系统不使用数据库_java学生成绩管理系统(不用数据库,用txt),写出来有报酬...
  14. 手机app抓包工具/web抓包工具之Fiddler——手机app抓包设置
  15. 为什么程序员不需要MATLAB技能?
  16. 【安全牛】一起来打靶第二周
  17. css 上中下三行布局 4种方式
  18. [建立基类Building,作为楼房类,这个基类中包含楼房层数、房间数、楼房总面积等。再建立派生类Home_Arch、Office_Building和Hospital,分别作为住宅楼类、办公楼类和医院
  19. 垂直水平居中的方法总结和适用场景
  20. MES系统到底是什么?

热门文章

  1. 第9章第14节:制作商业计划书的用户痛点幻灯片 [PowerPoint精美幻灯片实战教程]
  2. 总结一下2021年全国大学生电子设计大赛A题用到的MSP432P401开发板
  3. RN:调试工具Chrome、react-native-debugger、react-devtools、flipper对比
  4. 计算机语言在游戏编程的排名,从编程语言排行榜看技术发展趋势
  5. 邻接表法创建无向图(C语言)
  6. 网上企业手机订货软件源码定制搭建|移讯云订货通系统
  7. Linux下sql_labs第七关,SQL注入之Sqli-labs系列第二十七关(过滤空格、注释符、union select)和第二十七A...
  8. webgl实现发光线框(glow wireframe)效果
  9. 30岁左右必看:职场的中年焦虑症
  10. 智能外呼系统? 其工作流程是什么?