python爬虫实战---猫眼电影:西虹市首富的评论抓取

2024-02-08 12:50

本文主要是介绍python爬虫实战---猫眼电影:西虹市首富的评论抓取,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本文旨在抓取电影的评论,包括电影评论者的昵称、来自的城市、评论内容、评分以及评论的时间,并将这些内容抓取下来保存到txt文本里面,并对其中的评论内容去重,并生成词云。

导入库

from urllib.error import HTTPError,URLError---异常处理
from collections import defaultdict---创建列表
from wordcloud import WordCloud---词云的创建
import json---数据处理
import requests---抓取网页
import time---休眠
from os import path---找出项目的路径
from PIL import Image---导入要生成词云的图片
import numpy as np---数据转换
import jieba---分词分割

爬取的网页

 从网页源码中看到这些评论的数据并没有出现,也仅仅是看到10条评论信息,其他的看不多,这是猫眼电影的一大反爬防护,通过netword去分析也没有找到,最终通过切换为移动端去查看网页才发现了数据的接口,只要把数据的接口给下载了,再去解析 接口文件里面的数据就可以找到我们想要的数据了。

可以发现每次加载评论数据的时候都会出现一个json接口,http://m.maoyan.com/mmdb/comments/movie/1212592.json?_v_=yes&offset=0&startTime=0 (第一次评论数据加载),且最多加载到1000页。每次只需要替换offset参数的值即可得到下一页的评论数据

开始提取数据

利用requests库的get方法来下载数据

# 打开网页
def open_network(tomato_url):# 设置请求头,防止无法爬取下去(可以查看自己的浏览器里面的请求头)headers={'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36',}try:# get方法下载数据html=requests.get(tomato_url,headers=headers)except (HTTPError,URLError) as hu:print(hu)return Noneelse:return html.content# 获取网页的内容
def get_page_content(tomato_url,cmts):message=[]time.sleep(1)html_content=open_network(tomato_url)if html_content != None:html_content=html_content.decode('utf-8')# 转换为Python能处理的数据jsonObj=json.loads(html_content)if cmts in jsonObj:# 评论信息主要存在key为cmts的键里面data_cmts=jsonObj[cmts]for data_cmt in data_cmts:try:# 数据添加到一个列表中message.append({# 昵称、城市、评论内容、评分、日期'nickName':data_cmt['nickName'],'city':data_cmt['cityName'],'content':data_cmt['content'],'star':data_cmt['score'],'date':data_cmt['time']})except KeyError as ke:print(ke)continueelse:print('不存在这个key')return message

数据存储

写进txt文件里面,在打开一个文件时,需要设置好编码格式防止乱码。

# 热评写进txt文件
def create_content_txt(datas,fileName,i=0):with open('评论文件/西虹市首富'+fileName+str(i)+'.txt','w',encoding='utf-8')as f:for data in datas:if '\n' in data['content']:data['content']=data['content'].replace('\n','')f.write('昵称:'+data['nickName']+',城市:'+data['city']+',评论:'+data['content']+',星级:'+str(data['star'])+',日期:'+str(data['date'])+'\n')print('文件'+str(i)+'写入成功!')

评论内容去重并存储

由于评论的内容存在重复性,所以把重复的内容去除,并把新的评论内容存储到txt文件里面去,方便给词云生成提供数据。利用set集合的无重复性,每次把数据存到有del_datas=set()的全局变量里面去,可以实现去重

# 评论去重
def delete_data(datas):global del_datasfor data in datas:del_datas.add(data['content'])

词云生成

# 生成词云
def create_wordCloud():# 该程序的路径d=path.dirname(__file__)# 读取词云文件的内容text=open(path.join(d,'wordcloud.txt'),encoding='utf-8').read()# 进行分词text=jieba.cut(text)text=''.join(text)# 将PIL image图片转化为数组tomato=np.array(Image.open(path.join(d,'xin.png')))# 指定中文字体文件的路径、背景颜色、图片的宽高、最大词云数目、指定生成形状wc = WordCloud(font_path="C:/Windows/Fonts/simsun.ttc",background_color="white",width=627,height=834, max_words=2000, mask=tomato)# 生成词云wc.generate(text)#保存到本地wc.to_file(path.join(d, "shen_teng.png"))

程序入口

# 数据写进多个文件中
def write_data():i=0global cmtswhile i<=1000:data_cmts=get_page_content('http://m.maoyan.com/mmdb/comments/movie/1212592.json?_v_=yes&offset='+str(i)+'&startTime=0','cmts')# 文件写入create_content_txt(data_cmts,'短评',i)# 去重delete_data(data_cmts)i+=1# 去重写进文件,用于生成词云with open('wordcloud.txt','w',encoding='utf-8')as f:for del_data in del_datas:f.write(del_data+'\n')# 词云create_wordCloud()

 

效果

源码链接:https://pan.baidu.com/s/1xwxzehI4CzeMcL-YiKXFxg 密码:qcdl

这篇关于python爬虫实战---猫眼电影:西虹市首富的评论抓取的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:https://blog.csdn.net/weixin_36605200/article/details/81937380
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/691093

相关文章

在IntelliJ IDEA中高效运行与调试Spring Boot项目的实战步骤

《在IntelliJIDEA中高效运行与调试SpringBoot项目的实战步骤》本章详解SpringBoot项目导入IntelliJIDEA的流程,教授运行与调试技巧,包括断点设置与变量查看,奠定... 目录引言:为良驹配上好鞍一、为何选择IntelliJ IDEA?二、实战:导入并运行你的第一个项目步骤1

Spring Boot3.0新特性全面解析与应用实战

《SpringBoot3.0新特性全面解析与应用实战》SpringBoot3.0作为Spring生态系统的一个重要里程碑,带来了众多令人兴奋的新特性和改进,本文将深入解析SpringBoot3.0的... 目录核心变化概览Java版本要求提升迁移至Jakarta EE重要新特性详解1. Native Ima

Spring Boot 与微服务入门实战详细总结

《SpringBoot与微服务入门实战详细总结》本文讲解SpringBoot框架的核心特性如快速构建、自动配置、零XML与微服务架构的定义、演进及优缺点,涵盖开发环境准备和HelloWorld实战... 目录一、Spring Boot 核心概述二、微服务架构详解1. 微服务的定义与演进2. 微服务的优缺点三

SpringBoot集成MyBatis实现SQL拦截器的实战指南

《SpringBoot集成MyBatis实现SQL拦截器的实战指南》这篇文章主要为大家详细介绍了SpringBoot集成MyBatis实现SQL拦截器的相关知识,文中的示例代码讲解详细,有需要的小伙伴... 目录一、为什么需要SQL拦截器?二、MyBATis拦截器基础2.1 核心接口:Interceptor

Python错误AttributeError: 'NoneType' object has no attribute问题的彻底解决方法

《Python错误AttributeError:NoneTypeobjecthasnoattribute问题的彻底解决方法》在Python项目开发和调试过程中,经常会碰到这样一个异常信息... 目录问题背景与概述错误解读:AttributeError: 'NoneType' object has no at

Python使用openpyxl读取Excel的操作详解

《Python使用openpyxl读取Excel的操作详解》本文介绍了使用Python的openpyxl库进行Excel文件的创建、读写、数据操作、工作簿与工作表管理,包括创建工作簿、加载工作簿、操作... 目录1 概述1.1 图示1.2 安装第三方库2 工作簿 workbook2.1 创建:Workboo

基于Python实现简易视频剪辑工具

《基于Python实现简易视频剪辑工具》这篇文章主要为大家详细介绍了如何用Python打造一个功能完备的简易视频剪辑工具,包括视频文件导入与格式转换,基础剪辑操作,音频处理等功能,感兴趣的小伙伴可以了... 目录一、技术选型与环境搭建二、核心功能模块实现1. 视频基础操作2. 音频处理3. 特效与转场三、高

Python实现中文文本处理与分析程序的示例详解

《Python实现中文文本处理与分析程序的示例详解》在当今信息爆炸的时代,文本数据的处理与分析成为了数据科学领域的重要课题,本文将使用Python开发一款基于Python的中文文本处理与分析程序,希望... 目录一、程序概述二、主要功能解析2.1 文件操作2.2 基础分析2.3 高级分析2.4 可视化2.5

一文解密Python进行监控进程的黑科技

《一文解密Python进行监控进程的黑科技》在计算机系统管理和应用性能优化中,监控进程的CPU、内存和IO使用率是非常重要的任务,下面我们就来讲讲如何Python写一个简单使用的监控进程的工具吧... 目录准备工作监控CPU使用率监控内存使用率监控IO使用率小工具代码整合在计算机系统管理和应用性能优化中,监

Python实现终端清屏的几种方式详解

《Python实现终端清屏的几种方式详解》在使用Python进行终端交互式编程时,我们经常需要清空当前终端屏幕的内容,本文为大家整理了几种常见的实现方法,有需要的小伙伴可以参考下... 目录方法一:使用 `os` 模块调用系统命令方法二:使用 `subprocess` 模块执行命令方法三:打印多个换行符模拟