反贪风暴4-猫眼影评从爬取到可视化

我感觉学习python有一个阶段就是熟悉它的各种第三方库的使用,这次我们用jieba分词,用wordcloud生成词云,用pyecharts生成柱状图,来看看吧~

若您有需要,所有文件已上传到我的github(左上角图标直达)~

从爬虫开始好了,猫眼电影电脑网页版只能看热门影评。其实为了获取更多影评我们可以这样做,浏览器内按f12打开开发者工具,选择手机浏览模式,刷新后就会是手机版的网页了。如图:

然后查找接口,页面往下拉...em...很容易就找到了,是这个

这是一个js发起的get请求,看链接可以知道参数有

  1. movieId:1211727#电影id
  2. userId:-1#用户id,我猜是我没有登录所以为-1
  3. offset:0#控制返回的影评的位置,最主要的一条
  4. limit:15#一次返回15条影评
  5. ts:0#时间戳?不确定
  6. type:3#类型

我们伪造这一条请求就能直接获得影评了,而且返回是json格式,甚至都不用整理数据了

爬虫代码:

import requests
import json

headers = {
‘User-Agent‘: ‘Mozilla/5.0 (Linux; Android 5.1.1; MI 6  Build/NMF26X) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/39.0.0.0 Mobile Safari/537.36 TitansX/11.14.7 KNB/1.2.0 android/5.1.1 com.sankuai.moviepro/com.sankuai.moviepro/5.4.4 App/10a20/5.4.4 com.sankuai.moviepro/5.4.4‘,
}

def get_one(offset):
    url = ‘https://m.maoyan.com/review/v2/comments.json?‘
    params = {
        ‘movieId‘: ‘1211727‘,
        ‘userId‘: ‘-1‘,
        ‘offset‘: offset,  #offset控制传来第几页数据
        ‘limit‘: ‘15‘,
        ‘ts‘: ‘0‘,
        ‘type‘: ‘3‘,
    }
    r = requests.get(url=url,params=params,verify=False)  #verify=False为避免ssl认证,防止访问https时报错,这里假设所有访问都会正常,没有加容错机制。
    js = json.loads(r.text)  #将返回的json转为字典类型
    with open(‘fantan4.json‘,‘a‘,encoding=‘utf-8‘) as f:
        json.dump({"items":js[‘data‘][‘comments‘]}, f, ensure_ascii=False, sort_keys=True, indent=4)  #写获取的所有详情到json文件中
        f.write(‘,‘)  #这里加一个‘,‘是为了之后将json文件格式改造正确所用
    comments = []
    for dic in js[‘data‘][‘comments‘]:
        comments.append(dic[‘content‘])  #这里获取每条影评到列表
    str1 = ‘ ‘.join(comments)  #影评列表转字符串以‘ ‘分开
    print(str1)
    with open(‘com.txt‘,‘a‘,encoding=‘utf-8‘) as f:
        f.write(str1)  #单独写入影评到文件,用于词云的生成
for i in range(0,67):
    print(i)
    get_one(i*15)

保存的json我自己增加了一个键‘all’并以[]包含了所有的值,如图:

数据都准备好了就开始画图啦~先用评论按词频生成词云看看吧~这是做蒙版的图(自己扣出来的,羽化有点严重,请不要在意这些细节~~):

生成的词云:

生成词云的代码:

from os import path     #组织文件路径
from PIL import Image   #处理传入的背景图
#词云生成模块
from wordcloud import WordCloud,ImageColorGenerator
import matplotlib.pyplot as plt
import jieba     #中文分词
import numpy as np
#中文处理
import matplotlib.font_manager as fm
import io
import sys
sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding=‘utf-8‘)
#背景图
bg = np.array(Image.open(‘1.jpg‘))

#获取当前项目路径
dir = path.dirname(__file__)

#添加自定义的分词
jieba.add_word(‘古天乐‘)
jieba.add_word(‘林峰‘)
jieba.add_word(‘反贪‘)
#一些词要去除,停用词表
stopwords_path=‘stopwords.txt‘

#文本的名称
text_path=‘com.txt‘

#读取要分析的文本
text = open(path.join(dir,text_path),encoding=‘utf-8‘).read()

#函数,用于分词
def jiebaClearText(text):
    #空列表,将已经去除的停用词的分词保存
    myWordList = []
    #分词
    seg_list = jieba.cut(text,cut_all=False)
    #seg_list类型是generator
    #将每个generator的内容用/连接
    listStr = ‘/‘.join(seg_list)
    #停用表
    f_stop = open(stopwords_path,encoding=‘utf-8‘)
    #读取
    try:
        f_stop_text = f_stop.read()
    finally:
        f_stop.close()
    #停用词格式化,用\n分开(因为原来文件里一行一个停用词),返回一列表

    f_stop_seg_list = f_stop_text.split(‘\n‘)
    #将用‘/‘结合的内容分开并去重用于去掉停用词

    bookList=listStr.split(‘/‘)

    #默认模式遍历,去掉停用词
    for myword in bookList :
        #去掉停用词,逻辑:若内容不在停用词列表且长度>1则收录
        if not ((myword.split())) in f_stop_seg_list and len(myword.strip())>1:
            myWordList.append(myword)
    return myWordList
text1 = jiebaClearText(text)

#计算词频
frequency = {}
for i in text1:
    print(i)
    if i in frequency:
        frequency[i]+=1
    else:
        frequency[i]=1

print(frequency)
#生成
wc = WordCloud(
    background_color = ‘white‘,   #背景色
    max_words = 300,  #最大显示词数
    mask = bg,    #图片背景
    min_font_size=6,  # 字最大尺寸
    max_font_size = 100,   #字最大尺寸
    random_state = 42,
    font_path=‘C:/Windows/Fonts/simkai.ttf‘ #字体
).fit_words(frequency)

#为图片设置字体
my_font = fm.FontProperties(fname=‘C:/Windows/Fonts/simkai.ttf‘)

#产生背景图片,基于彩色图像的颜色生成器
image_colors = ImageColorGenerator(bg)
#画图
plt.imshow(wc.recolor(color_func=image_colors))

#为云图去掉坐标轴
plt.axis(‘off‘)
#画云图,显示
plt.figure()
#为背景图去掉坐标轴
plt.axis(‘off‘)
plt.imshow(bg,cmap=plt.cm.gray)

#保存
wc.to_file(‘man.png‘)

最后给出pyecarts生成柱状图的代码:

from pyecharts import Bar
import json

#用于记录不同性别的打分
all = {0:[0,0,0,],1:[0,0,0,],2:[0,0,0,],3:[0,0,0,],4:[0,0,0,],5:[0,0,0,],6:[0,0,0,],7:[0,0,0,],8:[0,0,0,],9:[0,0,0,],10:[0,0,0,]}
with open(‘fantan4.json‘,‘r‘,encoding=‘utf-8‘) as f:
    js = json.loads(f.read())

for i in js[‘all‘]:
    items = i[‘items‘]
    for details in items:
        score = details[‘score‘]
        #取分数
        gender = details[‘gender‘]
        #取对应性别
        all[score][gender]+=1
        print(all)
male,female,none = zip(all[0],all[1],all[2],all[3],all[4],all[5],all[6],all[7],all[8],all[9],all[10])
#以性别分开数据,这么做为了将数据转化满足pyecharts输入的要求

attr = [‘0分‘,‘1分‘,‘2分‘,‘3分‘,‘4分‘,‘5分‘,‘6分‘,‘7分‘,‘8分‘,‘9分‘,‘10分‘]
#0为男,1为女,2为未知
bar = Bar("评分",)
bar.add("男性评分", attr, male, is_stack=True)
bar.add("女性评分", attr, female, is_stack=True)
bar.add("未知性别评分", attr, none, is_stack=True)
bar.render(‘1.html‘)

效果(鼠标放上去试试~~):

Echarts

原文地址:https://www.cnblogs.com/byadmin/p/spider-3.html

时间: 2024-11-08 05:21:46

反贪风暴4-猫眼影评从爬取到可视化的相关文章

反贪风暴4高清MP4百度云下载

廉政公署收到报案人廖雨萍(周秀娜饰)的实名举报,举报正在坐牢的富二代曹元元(林峯饰)涉嫌行贿监狱里的监督沈济全(谭耀文饰)以及惩教员,首席调查主任陆志廉(古天乐饰)决定深入虎穴,卧底狱中.在监狱里,被陆志廉送入监狱的前警司黄文彬(林家栋饰)以及曹元元两大帮派势成水火,陆志廉趁机接近曹元元取得信任.同时监狱外的廉政公署总调查主任程德明(郑嘉颖饰).国内反贪局行动处处长洪亮(丁海峰饰)也陆港联手,通力合作,最终成功破获贪腐行贿大案. 链接:https://pan.baidu.com/s/1ICcEY

上海千众国际贸易有限公司上海反贪风暴或揭幕

我的保镖是霸道老大_黑手不是这个人2免费阅读_小说阅读网 蓝冰汐当时一脸的惊讶,她知道陈思思喜欢寒衣. 陈思思看到自己最喜欢的人向蓝冰汐告白,而且这个人在前不久还是自己的秘密男友,三天前不知何故就向自己提出分手的人. 陈思思就这样开始变了,变得连她周围的人都不认识了,变得蓝冰汐都认不出这是当年一直与自己谈笑风生的清纯女孩.总的一句话 巾世缘智能冷热面巾机,陈思思变了. 那时,寒衣身着桃红色衬衫,手里拿着一束玫瑰花,就这样,向蓝冰汐告白. 蓝冰汐紧紧的抓住手里的那叠资料,坚决的说道:"但是我不相信

《反贪风暴4》

1.古天乐:廉政公署 2.林峯:富二代,行贿者 讲述了一个廉政公署人员为了调查一个犯了贪污罪的的富二代,而卧底去监狱调查的事情,结果就是将他们安排明白,顺便吧监狱里面贪污的人消灭掉了. 剧情设计的真的很不合理,看的我贼尴尬, 1.一个正常露面抓贪污犯的廉政公署人员直接去做卧底,除了在监狱里面被转化为卧底的人认识,让男二这么权利滔天的富二代都查不到吗?真难受! 2.而且既然是以监狱生活作为背景,男主的生存环境也太好了吧,而且为了打进男二的圈子的意图也太明显了! 3.卧底和廉政公署人员直接探望室见面

爬取猫眼电影

爬去猫眼电影正字热映电影榜单的前五页: #爬取猫眼电影正在热映前5面的所有电影 import requests from requests import RequestException import re def get_one_page(url): header ={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.8

网站爬取-案例一:猫眼电影TOP100

今天有小朋友说想看一下猫眼TOP100的爬取数据,要TOP100的名单,让我给发过去,其实很简单,先来看下目标网站: 建议大家都用谷歌浏览器: 这是我们要抓取的内容,100个数据,很少 我们看一下页面结构 100部电影分十个页码,也就是一页10个电影,抓取方式为10页循环抓取 先看下代码: 引入模块: 这次我用REQUEST模块作为抓取工具,以JSON的形式做成文件存储方式 第一步:请求网页并且读取:   这个网站并没有设立反爬虫手段 第二步:解析网页函数: 我这里用的正则表达式 第三步:定义存

python反反爬,爬取猫眼评分

python反反爬,爬取猫眼评分.解决网站爬取时,内容类似:$#x12E0;样式,且每次字体文件变化.下载FontCreator . 用FontCreator打开base.woff.查看对应字体关系 初始化时将对应关系写入字典中. 1 #!/usr/bin/env python 2 # coding:utf-8 3 # __author__ = "南楼" 4 5 6 import requests 7 import re 8 import os 9 10 from fontTools.

Scrapy 通过登录的方式爬取豆瓣影评数据

Scrapy 通过登录的方式爬取豆瓣影评数据 爬虫 Scrapy 豆瓣 Fly 由于需要爬取影评数据在来做分析,就选择了豆瓣影评来抓取数据,工具使用的是Scrapy工具来实现.scrapy工具使用起来比较简单,主要分为以下几步: 1.创建一个项目 ==scrapy startproject Douban 得到一个项目目录如下: ├── Douban │   ├── init.py │   ├── items.py │   ├── pipelines.py │   ├── settings.py

复仇者联盟3热映,我用python爬取影评告诉你它都在讲什么

Python(发音:英[?pa?θ?n],美[?pa?θɑ:n]),是一种面向对象.直译式电脑编程语言,也是一种功能强大的通用型语言,已经具有近二十年的发展历史,成熟且稳定.它包含了一组完善而且容易理解的标准库,能够轻松完成很多常见的任务.它的语法非常简捷和清晰,与其它大多数程序设计语言不一样,它使用缩进来定义语句. Python支持命令式程序设计.面向对象程序设计.函数式编程.面向切面编程.泛型编程多种编程范式.与Scheme.Ruby.Perl.Tcl等动态语言一样,Python具备垃圾回收

14-Requests+正则表达式爬取猫眼电影

'''Requests+正则表达式爬取猫眼电影TOP100''''''流程框架:抓去单页内容:利用requests请求目标站点,得到单个网页HTML代码,返回结果.正则表达式分析:根据HTML代码分析得到电影的名称.主演.上映时间.评分.图片链接等信息.保存至文件:通过文件的形式保存结果,每一部电影一个结果一行Json字符串.开启循环及多线程:对多页内容遍历,开启多线程提高抓取速度.'''import requestsimport refrom requests.exceptions impor