《猫眼电影实时票房》这个网页是通过动态加载的数据,大约4秒钟就要请求一次服务器,上面的数据每次请求都会产生变化,如果直接用requests请求它的html源代码,并获取不了它的数据。
网页地址: https://piaofang.maoyan.com/dashboard?movieId=1211270

需要爬取的内容有:
猫眼排名,电影名称,综合票房,票房占比,排片场次,排片占比,场均人次,上座率,上映天数

直接通过这个url请求网页:

结果: 在输出的结果中并没有找到需要得数据,所以这个方法并行不通

怎么获取动态加载的数据?

1、在网页中找到传输数据的URL

2、请求数据

import requests
import pprint
url = 'https://box.maoyan.com/promovie/api/box/second.json' #刚才复制的link address
res = requests.get(url)
  • pprint 包含一个“美观打印机”,用于生成数据结构的一个美观视图。格式化工具会生成数据结构的一些表示,不仅可以由解释器正确地解析,而且便于人类阅读。输出尽可能放在一行上,分解为多行时则需要缩进。
pprint.pprint(res.json())

美化后输出的结果:

{'data': {'crystal': {'maoyanViewInfo': '378.5','status': 1,'viewInfo': '697.9','viewUnitInfo': '万张'},'list': [{'avgSeatView': '16.3%','avgShowView': '25','avgViewBox': '34.4','boxInfo': '11794.28','boxRate': '48.0%','movieId': 1211270,'movieName': '哪吒之魔童降世','myRefundNumInfo': '--','myRefundRateInfo': '--','onlineBoxRate': '--','refundViewInfo': '--','refundViewRate': '--','releaseInfo': '上映14天','releaseInfoColor': '#666666 1.00','seatRate': '44.4%','showInfo': '140407','showRate': '38.0%','splitAvgViewBox': '30.9','splitBoxInfo': '10603.21','splitBoxRate': '47.9%','splitSumBoxInfo': '28.02亿','sumBoxInfo': '30.41亿','viewInfo': '342.2','viewInfoV2': '342.2万'},<---省略部分内容 --->

现在就可以得到一个美观的字典型数据进行参照提取相应的内容,字典的功能之一就是方便查找数据。

3、查找所有需要的数据

rank = 0
for mv in res.json()['data']['list']:#注意字典的层级关系rank = rank + 1 #网页中的排名并没有在.json这个url中,就直接循环赋值name = mv['movieName']#查找数据zhpf = mv['boxInfo']pfzb = mv['splitBoxRate']ppcc = mv['showInfo']ppzb = mv['showRate']cjrc = mv['avgShowView']szl = mv['avgSeatView']syts = mv['releaseInfo']print (rank,name,zhpf,pfzb,ppcc,ppzb,cjrc,szl,syts)

运行结果:

1 上海堡垒 3651.98 54.3% 132944 33.7% 8 5.8% 上映首日
2 哪吒之魔童降世 1295.51 19.2% 105251 26.7% 4 2.4% 上映15天
3 使徒行者2:谍影行动 914.45 13.5% 75694 19.2% 4 2.9% 上映3天
4 烈火英雄 509.42 7.5% 53329 13.5% 3 2.5% 上映9天
5 红星照耀中国 129.95 1.8% 9332 2.3% 4 3.4% 上映2天
6 童童的风铃密室 46.97 0.6% 3471 0.8% 5 5.0% 上映首日
7 桂香街 28.20 0.4% 120 <0.1% 60 50.6% 上映19天
8 萤火奇兵2:小虫不好惹 28.10 0.4% 2867 0.7% 4 3.1% 展映
9 古田军号 16.16 0.2% 1337 0.3% 4 3.0% 上映9天
10 鼠胆英雄 9.90 0.1% 1699 0.4% 2 1.3% 上映8天
11 银河补习班 9.87 0.1% 1444 0.3% 2 2.2% 上映23天
12 冰雪女王4:魔镜世界 8.43 0.1% 1295 0.3% 2 2.0% 上映8天
13 匠心 7.23 0.1% 34 <0.1% 66 56.2% 上映23天
14 极度危机 6.60 <0.1% 393 <0.1% 5 5.2% 上映首日
15 狮子王 6.35 <0.1% 483 0.1% 4 3.9% 上映29天
16 最美的地方遇见你 5.56 <0.1% 236 <0.1% 8 7.3% 上映8天
17 哈姆雷特 4.26 <0.1% 2 <0.1% 146 73.0% 2016-01
18 周恩来回延安 4.10 <0.1% 36 <0.1% 36 37.0% 上映87天
19 赛尔号大电影7:疯狂机器城 3.93 <0.1% 665 0.1% 2 1.8% 上映8天
20 神奇马戏团之动物饼干 2.48 <0.1% 538 0.1% 3 2.0% 2018-07
21 李尔王 1.75 <0.1% 1 <0.1% 120 82.7% 展映
22 丛林历险记 1.74 <0.1% 525 0.1% 2 1.1% 上映2天
23 游戏人生 零 1.62 <0.1% 23 <0.1% 20 33.3% 上映22天
24 特别追踪 1.59 <0.1% 4 <0.1% 123 77.9% 2018-09
25 悲惨世界:25周年纪念演唱会 1.53 <0.1% 1 <0.1% 105 76.0% 展映
26 跳舞吧!大象 1.35 <0.1% 39 <0.1% 8 8.6% 上映15天
27 白蛇:缘起 1.00 <0.1% 521 0.1% 2 1.2% 2019-01

注意: 在网页上只能显示27条数据,我第一次运行的时候,《哪吒之魔童降世》排名是第一的,现在重新运行python加载后,排名已经变了,这是正常的

将数据保存到csv及源码如下:

#!/usr/bin/env python3
#-*-coding:utf-8-*-
import requests,csv
import pprint
url = 'https://box.maoyan.com/promovie/api/box/second.json'
res = requests.get(url)
pprint.pprint(res.json())#创建CSV文件,并写入表头信息
fp = open('G:\maoyan_data.csv','a',newline='',encoding='utf-8')
writer = csv.writer(fp)
writer.writerow(('猫眼排名','电影名称','综合票房','票房占比','排片场次','排片占比','场均人次','上座率','上映天数'))rank = 0
for mv in res.json()['data']['list']:#注意字典的层级关系rank = rank + 1 #网页中的排名并没有在.json这个url中,就直接循环赋值name = mv['movieName']#查找数据zhpf = mv['boxInfo']pfzb = mv['splitBoxRate']ppcc = mv['showInfo']ppzb = mv['showRate']cjrc = mv['avgShowView']szl = mv['avgSeatView']syts = mv['releaseInfo']print (rank,name,zhpf,pfzb,ppcc,ppzb,cjrc,szl,syts)# 写入csv数据writer.writerow((rank,name,zhpf,pfzb,ppcc,ppzb,cjrc,szl,syts))

csv结果如下:

如果出现csv乱码,请参照python xpath爬取豆瓣图书Top 250存入csv文件并解决csv乱码问题

python爬取动态加载的网页之爬取猫眼电影实时票房相关推荐

  1. python爬虫动态加载页面_Python+Selenium爬取动态加载页面(2)

    注: 上一篇<Python+Selenium爬取动态加载页面(1)>讲了基本地如何获取动态页面的数据,这里再讲一个稍微复杂一点的数据获取全国水雨情网.数据的获取过程跟人手动获取过程类似,所 ...

  2. 用Python爬取动态加载的诸如百度的图片

    用Python爬取动态加载的诸如百度的图片 使用原因 代码如下 模块介绍 selenium模块 lxml解析模块 requests模块 去除重复 开启多线程 效果如下 留言 使用原因 学习Python ...

  3. selenium爬取Ajax加载的网页(以微博为例)

    Tip:我写了一篇直接构造请求获取微博数据的文章,不使用selenium,直接访问url获取到json数据,然后解析即可得到想要的数据的文章,请参考微博博主动态及相册的请求构造规律 ========= ...

  4. 用爬虫抓取动态加载数据丨Python爬虫实战系列(6)

    提示:最新Python爬虫资料/代码练习>>戳我直达 前言 抓取动态加载数据 话不多说,开练! 爬虫抓取动态加载数据 确定网站类型 首先要明确网站的类型,即是动态还是静态.检查方法:右键查 ...

  5. java.lang.NoClassDefFoundError:org/apache/commons/io/Charsets (jsoup配合htmlunit 爬取异步加载的网页遇到的)

    最近用jsoup配合htmlunit 爬取异步加载的网页运行代码的时候,报错java.lang.NoClassDefFoundError:org/apache/commons/io/Charsets ...

  6. 关于使用scrapy框架编写爬虫以及Ajax动态加载问题、反爬问题解决方案

    关于使用scrapy框架编写爬虫以及Ajax动态加载问题.反爬问题解决方案 参考文章: (1)关于使用scrapy框架编写爬虫以及Ajax动态加载问题.反爬问题解决方案 (2)https://www. ...

  7. python爬取电影票房前50_Python3爬取起猫眼电影实时票房信息,解决文字反爬~~~附源代码...

    上文解决了起点中文网部分数字反爬的信息,详细链接https://www.cnblogs.com/aby321/p/10214123.html 本文研究另一种文字反爬的机制--猫眼电影实时票房反爬 虽然 ...

  8. python爬动态网页json_爬虫再探实战(四)———爬取动态加载页面——请求json...

    还是上次的那个网站,就是它.现在尝试用另一种办法--直接请求json文件,来获取要抓取的信息. 第一步,检查元素,看图如下: 过滤出JS文件,并找出包含要抓取信息的js文件,之后就是构造request ...

  9. python爬取动态网页图片_python爬虫之爬取动态加载的图片_百度

    运行坏境 python3.x 选择目标--百度 当我们在使用右键查看网页源码时,出来的却是一大堆JavaScript代码,并没有图片的链接等信息 因为它是一个动态页面嘛.它的网页原始数据其实是没有这个 ...

最新文章

  1. 一步一步解决 kernel 2.6 usb host driver
  2. MariaDB exists 学习
  3. Blog.Core高级进阶:共赴五年之约
  4. 你不懂js系列学习笔记-异步与性能- 02
  5. ApacheHttpServer修改httpd.conf配置文件
  6. 如何编写优雅的代码:06. 设计模式应用案例(上)
  7. 启动和停止mysql服务器_MySQL服务器的启动与关闭方法
  8. 使用 dom4j 解析 XML
  9. PHP使用DES进行加密和解密
  10. Bing Maps进阶系列二:使用GeocodeService进行地理位置检索
  11. Java——用户激活邮件工具类
  12. Unity粒子系统——简易特效制作(一)
  13. Ragel——基于有限状态机用于产生源码的编译器
  14. 你想知道的JPype全在这里∞
  15. 小程序tabBar无效
  16. 体验云编程——IOS脚本学习门户
  17. 对计算机的一点点看法
  18. 熊写代码这三年:阅读写作与技术成长
  19. 送大家一个圣诞节挂件小程序,微信头像可以戴圣诞帽了
  20. 欧姆龙NX1P2编程学习(1)-编写功能块注意事项

热门文章

  1. nice、renice
  2. 平板有必要买触控笔吗?好用又便宜的触控笔推荐
  3. PHP基础知识【大纲】
  4. 微信小程序添加插屏广告并设置显示频率(一天一次)
  5. python中pip下载的代理设置
  6. IEC101召唤过程
  7. 最佳运动类APP-Keep原型设计与欣赏
  8. 关于360系列手机定位不准确中的一种问题--位置穿越
  9. Shamir秘密共享协议
  10. jdk官网_jdk官网下载教程