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

news/2024/11/17 20:28:15/

本文旨在抓取电影的评论,包括电影评论者的昵称、来自的城市、评论内容、评分以及评论的时间,并将这些内容抓取下来保存到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


http://www.ppmy.cn/news/829179.html

相关文章

不是冤家不碰头:贝索斯和马斯克入选福布斯“全球最抠门亿万富豪”榜单

整理 | 祝涛 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; 据报道&#xff0c;虽然杰夫贝索斯&#xff08;Jeff Bezos&#xff09;和埃隆马斯克&#xff08;Elon Musk&#xff09;两位科技大佬在谁更有钱和谁更喜欢打官司这些事情上争论不休&#xff0c;但他们…

2021中国胡润百富榜揭晓:中国首富竟是他......

2021中国胡润百富榜 前几天看到一个有意思的榜单“中国胡润百富榜单”&#xff0c;今年是胡润研究院自1999年以来连续第23次发布“胡润百富榜”&#xff0c;上榜门槛连续第九年保持20亿元。今天带大家分析看看中国都有哪些大牛&#xff01; 数据采集 数据来源&#xff1a;ht…

农村穷小子的逆袭之路;如何一步一步成为中国首富。

马云&#xff0c;中国著名企业家&#xff0c;农村出身&#xff0c;是阿里巴巴主要创始人之一。从一无所有到中国首富&#xff0c;他在这段时间里都经历了什么?经历了多少的失败&#xff0c;我想大部分人都不知道&#xff0c;下面我们来看看马云创业故事&#xff0c;他是如何成…

利用selenium爬取《西虹市首富影评》

目标网址&#xff1a;豆瓣网 https://movie.douban.com/subject/27605698/comments?statusP 使用工具&#xff1a;pythonselenium 首先&#xff0c;很简单的&#xff0c;我们得使用selenium的webdriver去打开网址&#xff0c;自动实现打开网页&#xff0c;并且翻页&#xff1a…

全球富豪大洗牌!马斯克登顶世界首富,黄铮国内第三超马云

整理 | 王晓曼 出品 | 程序人生 &#xff08;ID&#xff1a;coder _life&#xff09; 3 月 2 日&#xff0c;胡润研究院发布《2021 胡润全球富豪榜》&#xff0c;特斯拉 CEO 埃隆马斯克以 1.28 万亿元人民币的身价&#xff0c;首次成为世界首富。中国企业家、农夫山泉创始人钟睒…

谁是中国首富?

第一名毫无疑问是阿里巴巴创始人马云先生。马云1999年创立阿里巴巴&#xff0c;带领阿里巴巴于2007年香港联交所主板上市&#xff0c;随后香港联交所退市后于2014年9月19号&#xff0c;带领阿里巴巴在纽交所上市&#xff0c;马云持有阿里巴巴约7%的股份&#xff0c;财富2387.4亿…

《西虹市首富》带来的除了欢笑,还有什么?作为互联网人的思考

周末去看了《西虹市首富》&#xff0c;冲着开心麻花去的&#xff0c;现在开心麻花知名度越来越高&#xff0c;也逐渐已经成为喜剧电影口碑的象征之一了。回到电影本身&#xff0c;情节设计虽然有些繁缛&#xff0c;但是笑点还是挺足的&#xff0c;推荐有时间可以去看看。 一、一…