详解使用Python爬取豆瓣短评并绘制词云
使用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爬取豆瓣短评并绘制词云相关推荐
- 爬取豆瓣短评并输出词云
说明: 爬取豆瓣电影,书籍,音乐(可选择)的所有短评信息,最终筛选出现频率最高的100词生成词云.但是我这个写的有点问题是,在挂代理ip测试时把豆瓣账号永久封禁,造成了电影短评无法全部获取,但书籍,和 ...
- Python - 爬取豆瓣短评评论
Python - 爬取豆瓣短评评论 import requests from bs4 import BeautifulSoup import re import time# 保存豆瓣评分 source ...
- python爬取豆瓣短评_Python爬取豆瓣指定书籍的短评
Python爬取豆瓣指定书籍的短评 #!/usr/bin/python # coding=utf-8 import re import sys import time import random im ...
- python爬取豆瓣短评_爬取并简单分析豆瓣电影短评
导语 利用Python爬取并简单分析豆瓣电影短评. 说起来挺逗的,去年爬豆瓣短评的时候还是可以爬个几万条数据的,昨天我还想着终于可以起个唬人的标题了,什么爬取了xxx电影的xxx万条数据. 于是昨晚写 ...
- python爬取豆瓣短评_爬虫-爬取豆瓣短评
爬虫-爬取豆瓣短评 啥是爬虫? 按照一定的规则,自动地抓取互联网信息的程序. 为啥要用爬虫? 可以利用爬虫自动地采集互联网中的信息,采集回来后进行相应的存储或处理,在需要检索某些信息的时候,只需在 ...
- python爬取豆瓣短评,提取出现最多的词语
文章目录 前言 关于项目 博客结构 项目简介 用到的库 自己的工具类 相关配置 效果展示 过程简述 全局变量 main方法 get_id方法 get_comments方法 步骤详解 获取主键 请求阶段 ...
- [转载]Python爬取豆瓣影评并生成词云图代码
# -*- coding:utf-8 -*- ''' 抓取豆瓣电影某部电影的评论 这里以<我不是潘金莲为例> 网址链接:https://movie.douban.com/subject/2 ...
- 实例:爬取豆瓣评论、绘制词云图以及情感分析——以《长津湖》为例
一.爬取豆瓣<长津湖>网页评论 (由于存在一定的反爬机制,以下代码最多只能爬取210条评论) # 导入工具包 import requests from bs4 import Beautif ...
- python爬虫网站 词云_Python爬虫之爬取情话网站并绘制词云
一.爬取网站 1.分析目标网站 首先我们需要分析目标网站的源代码 分析html得知所有的情话都是在标签 下,而且一个 标签对应着一句情话. 2.编写代码 import bs4 import reque ...
最新文章
- 公司用的 MySQL 团队开发规范,非常详细,建议收藏!
- 大数据处理系列之(一)Java线程池使用
- C语言标准字符char和字符串string
- 【Idea解法】Failed to execute goal on project : Could not resolve dependencies for pro
- python爬虫第二课:url解析
- Linux驱动(8)--内核编译与配置
- VS2010 字体和背景设置
- 陈年佳酿之 - Winform ListView 控件 double click 事件中获取选中的row与column
- 实战tkinter图形界面开发_八款常用的 Python GUI 开发框架推荐
- 到底啥是平台,到底啥是中台?李鬼太多,不得不说
- mysql 5.6 默认密码_mysql5.6配置及修改密码
- Python3自动生成MySQL数据字典的markdown文本的实现
- java学生成绩管理系统不使用数据库_java学生成绩管理系统(不用数据库,用txt),写出来有报酬...
- 手机app抓包工具/web抓包工具之Fiddler——手机app抓包设置
- 为什么程序员不需要MATLAB技能?
- 【安全牛】一起来打靶第二周
- css 上中下三行布局 4种方式
- [建立基类Building,作为楼房类,这个基类中包含楼房层数、房间数、楼房总面积等。再建立派生类Home_Arch、Office_Building和Hospital,分别作为住宅楼类、办公楼类和医院
- 垂直水平居中的方法总结和适用场景
- MES系统到底是什么?
热门文章
- 第9章第14节:制作商业计划书的用户痛点幻灯片 [PowerPoint精美幻灯片实战教程]
- 总结一下2021年全国大学生电子设计大赛A题用到的MSP432P401开发板
- RN:调试工具Chrome、react-native-debugger、react-devtools、flipper对比
- 计算机语言在游戏编程的排名,从编程语言排行榜看技术发展趋势
- 邻接表法创建无向图(C语言)
- 网上企业手机订货软件源码定制搭建|移讯云订货通系统
- Linux下sql_labs第七关,SQL注入之Sqli-labs系列第二十七关(过滤空格、注释符、union select)和第二十七A...
- webgl实现发光线框(glow wireframe)效果
- 30岁左右必看:职场的中年焦虑症
- 智能外呼系统? 其工作流程是什么?