在本次推送中,以猫眼电影 APP 中的电影评论作为爬取目标,完成对网页数据的采集。在采集完成后,我们将每个评论数据采集分用户名、评论时间、用户性别、用户等级、用户所在城地、用户评分、以及评论内容等,并将它们以 .xls 的文件格式进行保存。

《无双》电影

1 准备工作

在爬虫开始之前,请确保已经安装好了 requests 库、xlwt 库以及 json 库。如果没有安装,请使用 cmd 打开命令行界面,输入以下代码:

pip install requests

pip install xlwt

pip install json

2 抓取分析

我们发现,在猫眼PC端的网页中,只存在最热门的10条评论数据,这显示是不够支撑我们进行后续的数据分析的。

猫眼电影《无双》共计31.9万人评分

因此,我们选择登录手机网页版本,即

猫眼移动端网页

按下 F12 或者鼠标点击右键检查按钮,点击进入Network一栏。如下图所示:

分析网页代码

随后我们再次按下 F5 刷新按钮,有时需要按下 CTRL + F5组合键。便能够将页面再次刷新。寻找网站评论入口,如下图所示:

寻找网站评论入口

可以看到里面包含了 Request URL(请求地址)、Request Method(请求方式)、Status Code(状态码)等信息。再往下翻比较重要的信息就是 Host、Referer、User-Agent、以及X-Requested-With等信息。

这些信息获取之后,我们便可以开始今天的爬虫工作了。

3 爬取信息

首先,我们需要导入一些第三方库。具体如下:

import requests

import xlwt

import json

其中,requests 库是用来向服务器发送 GET 类型的请求,xlwt 库是用来操作 .xls 文件的,而我们的数据因为是 json 格式的数据,因此需要对它进行解析,这里便用到了 json 库。

3.1 设置请求头

一般情况下,为了避免触发反爬虫机制,需要完善一下请求头信息,这里我们把它作为一个独立的函数方便后续调用,具体如下:

def get_page(url):

headers = {

'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36',

'Cookie':'_lxsdk_cuid=1661ae34b39c8-0c8c15380422c-2711639-144000-1661ae34b39c8; v=3; __utma=17099173.21012536.1539393286.1539393286.1539393286.1; __utmc=17099173; __utmz=17099173.1539393286.1.1.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=(not%20provided); __utmb=17099173.2.9.1539393288643; uuid_n_v=v1; iuuid=B7EC5090CE8511E89675C9EEEAD92C526D3F6AA2E9344F5091F4218FA118AAEF; webp=true; ci=55%2C%E5%8D%97%E4%BA%AC; __mta=207950381.1538049396050.1539393287057.1539393443480.10; _lx_utm=utm_source%3Dgoogle%26utm_medium%3Dorganic; _lxsdk=B7EC5090CE8511E89675C9EEEAD92C526D3F6AA2E9344F5091F4218FA118AAEF; _lxsdk_s=1666af306c5-403-5fd-037%7C%7C45',

'Host':'m.maoyan.com',

'Referer':'http://m.maoyan.com/movie/342166/comments?_v_=yes',

'X-Requested-With':'superagent'

}

return requests.get(url,headers = headers)

接下来我们便开始网页评论的爬取工作。

3.2 评论爬取与保存

在分析爬取的网址时,具体如下:

http://m.maoyan.com/mmdb/comments/movie/342166.json?_v_=yes&offset=0&startTime=0

http://m.maoyan.com/mmdb/comments/movie/342166.json?_v_=yes&offset=15&startTime=2018-10-15%2016%3A56%3A10

http://m.maoyan.com/mmdb/comments/movie/342166.json?_v_=yes&offset=30&startTime=2018-10-15%2016%3A56%3A10

我们发现,网页请求URL前面部分都是一致的,只有在 offset 的地方才发生改变,而后面的 startTime 便是你此刻获取最新评论的最后时间(这里的内容不是很重要,我们可以从任意时间获取评论)。最简单的做法就是我们直接更改 offset 位置的数字,从0,15,30,……一直加下去。

但是这个时候问题又出现了,采取这一方式只能获取当天的前1000条评论,怎么办?后来我又发现可以对 startTime 的时间进行修改。比如当前的日期是2018-10-15,只要电影上映后,任意的时间日期我都可以获取到数据。此时可以再加入一个对日期的循环。

这里的爬取网页 URL 的任务我们便完成了,接下来便是对数据的保存工作。我们选择 .xls 文件进行保存,因为第三方 xlwt 库只能对文件保存一次,后续的修改将会覆盖之间的内容。因此我们将文件的保存一并写入评论获取的函数中,方便操作。具体代码如下:

def get_comment():

comment = [None] * 7

file = 'Project_Gutenberg_comment.xls'

# 创建一个Excel

book = xlwt.Workbook()

# 在其中创建一个名为'无双'的sheet

sheet1 = book.add_sheet('无双', cell_overwrite_ok=True)

#设置需要保存的信息栏

row0 = ['nickName', 'startTime', 'gender', 'userLevel', 'cityName', 'score', 'content']

#将首行信息写入

for l in range(len(row0)):

sheet1.write(0, l, row0[l])

#对时间进行循环,因为电影上映的时间是9月30号,我们选择从爬取的评论是从10月1号到10月15号(也就是今天)

for day in range(1,16):

print('正在爬取10月{}日的评论'.format(day))

#每天只能爬取前1000条数据,每页15条,因此67次循环之后,便不再有数据可以爬取了

for i in range(67):

print('正在下载第{}页评论'.format(i + 1))

r = get_page('http://m.maoyan.com/mmdb/comments/movie/1217402.json?_v_=yes&offset=' + str(

i*15) + '&startTime=2018-10-{}%2023%3A59%3A59'.format(day))

#判断网页状态码,正常则对数据进行爬取,否则直接退出循环

if r.status_code == 200:

try:

soup = json.loads(r.text)['cmts']

j= 0

#保存数据

for cmt in soup:

j += 1

try:

comment[0] = cmt['nickName']

comment[1] = cmt['startTime']

if cmt.get('gender'):

comment[2] = cmt['gender']

else:

comment[2] = None

comment[3] = cmt['userLevel']

comment[4] = cmt['cityName']

comment[5] = cmt['score']

comment[6] = cmt['content']

except:

break

#写入数据

for k in range(len(comment)):

sheet1.write((day-1)*1005+(i*15+j), k, comment[k])

except:

break

else:

break

#保存文件

book.save(file)

3.3 启动程序

输入以下代码便能完成整个程序的运行:

if __name__ == '__main__':

get_comment()

print('爬取结束')

4 总结与展望

当最后程序完成后,会在根目录下显示 Project_Gutenberg_comment.xls 文件,这时便完成了数据采取工作。值得一提的是,无论是机器学习,还是数据分析,它们的基础便是数据,因此数据的获取至关重要。

这里我们只是简单的获取了猫眼电影移动端每天前1000条评论,并未完整的爬取某一天的全部评论,这一任务可以留作后续我们继续完成。

微信公众号:问题或建议,请评论留言

python爬猫眼电影影评,EX1 | 用Python爬取猫眼电影 APP 关于《无双》电影评论相关推荐

  1. 有关如何用html制作电影影评网,初阶展示

    在HTML中,无论是想用代码写出怎样的界面展示效果图,首先你都得分析其大体轮廓,再分部完善细节. 1.电影影评网分析 <!DOCTYPE html> <html>     &l ...

  2. python爬猫眼电影影评,Python系列爬虫之爬取并简单分析猫眼电影影评

    前言 今天给大家介绍利用Python爬取并简单分析猫眼电影影评.让我们愉快地开始吧~ 开发工具 Python版本:3.6.4 相关模块: requests模块: pyecharts模块: jieba模 ...

  3. Python爬猫眼电影影评及可视化 Robin NJU

    1.Fiddler4抓包分析影评数据接口 1.1 基本设置 ①电脑端:下载Fiddler4 设置:tools-options-connections-allow remote computers to ...

  4. Python爬虫系列之爬取猫眼电影,没办法出门就补一下往期电影吧

    前言 今天给大家介绍利用Python爬取并简单分析猫眼电影影评.让我们愉快地开始吧~ 开发工具 Python版本:3.6.4 相关模块: requests模块: pyecharts模块: jieba模 ...

  5. python爬取电影评分_用Python爬取猫眼上的top100评分电影

    代码如下: # 注意encoding = 'utf-8'和ensure_ascii = False,不写的话不能输出汉字 import requests from requests.exception ...

  6. python爬虫,爬取猫眼电影1(正则表达式)

    本文用正则.xpath.beautifulsoup.css.pyquery几种不同的方式,爬取猫眼电影.只是记录过程.比较乱. 猫眼电影现在也添加了一些反爬虫机制,如果直接用requests可能会40 ...

  7. Python语言实现用requests和正则表达式方法爬取猫眼电影排行榜前100部电影

    #爬取猫眼电影排名前100的电影 import requests #电脑向服务器发送的请求库 from requests.exceptions import RequestException impo ...

  8. python实战(一)Python爬取猫眼评分排行前100电影及简单数据分析可视化python实战(一)Python爬取猫眼排行前一百电影及简单数据分析可视化

    python实战(一)Python爬取猫眼排行前一百电影及简单数据分析可视化 一.抓取数据 需要的库 request库 响应http请求 json库 将文本保存成json形式 pyquery 类似JQ ...

  9. python实战(一)Python爬取猫眼评分排行前100电影及简单数据分析可视化

    python实战(一)Python爬取猫眼排行前一百电影及简单数据分析可视化 一.抓取数据 需要的库 request库 响应http请求 json库 将文本保存成json形式 pyquery 类似JQ ...

最新文章

  1. 零基础自学python看什么书-零基础Python入门看哪本书好?这里有答案
  2. vue 组件之间函数传递_组件之间相互传递参数
  3. 如何用Python批量修改文件名?
  4. Linux服务器硬件及RAID配置(操作实验详细图解)
  5. Redis数据库(二)——Redis高可用、持久化及性能管理
  6. 串口服务器应用领域及应用方案详解
  7. Mobile孵化周即将在加州召开!
  8. SQLite For .Net 已经整合了32位和64位
  9. 5G新基建边缘计算乘风破浪
  10. 送给520的产品经理
  11. 第十三节:易学又实用的新特性:for...of
  12. Mybatis 一连串提问,被面试官吊打了!
  13. bat ping 返回值_清清楚楚玩游戏!10.10版本,赛娜被动层数可以ping给队友看了
  14. BZOJ 1296: [SCOI2009]粉刷匠( dp )
  15. css 动态设定div背景颜色
  16. jquery获取选中和未选中的checkbox复选框
  17. 无法关闭计算机xp,WindowsXP电脑无法关机的解决方法
  18. 【Ambari】Build and install Ambari 2.7.5
  19. GD32F30x系列ADC源码,对初学者参考价值巨大,(非常详细篇)万字源码
  20. HTML基础总结笔记

热门文章

  1. python学习笔记9.2-文件及文件夹操作
  2. JAVA面经复习(二十六)面试难度:☆☆☆☆
  3. ElasticSearch【从入门到服务器部署项目案例】详细教程
  4. php 表单必选改为选填,织梦dedecms自定义表单选项必填修改解决方法
  5. GUESS手表全新推出2022年农历新年系列
  6. ROP_Emporium_ret2csu
  7. 你看那个老爷爷拿着那么沉的袋子
  8. 过期域名查询 php,域名啦过期删除域名检索系统 v1.0
  9. 行人重识别-姿态检测
  10. 以太网(802.3)帧结构 (转)