实战:战狼2票房数据分析——(1)数据获取及解析
前⾔
战狼最近⼤⽕,为了紧跟热度,根据之前学的做⼀个关于战狼2票房售卖情况的数据分析。
要做数据分析,⾸先要有数据,数据从哪⼉来呢?
⽹上有专门做票房时时统计的⽹站,他们会把最新的票发信息公布在⽹上,但是数据是以⽹页的⽅式呈现,⽽不是直接给你,所以我们需要做的就是先把⽹上的数据爬下来。
⽹页截图如下:
可以看到url中有⼀个data参数,可以根据传⼊⽇期来获取指定⽇期的票房数据
数据获取
python中可以通过引⽤urllib包来进⾏⽹页信息的抓取,在通过对⽹页结果分析来筛选出想要的数据。
获取⽹页源⽂件
⾸先引⽤两个包,再定义⼀个变量,将要抓取的url地址进⾏赋值
#-*- coding: utf-8 -*-
import urllib
url = 'piaofang.maoyan/?date=2017-08-01'
构造⼀个⽅法⽤于获取⽹页的源代码
def getHtml(url):
page = urllib.urlopen(url)
html = ad()
return html
当我们执⾏以下代码时,我们会在控制台中看到该⽹页的所有源代码
html = getHtml(url)
print html
运⾏结果如下
runfile('C:/Users/Administrator/.spyder2/temp.py', wdir='C:/Users/Administrator/.spyder2')
<!DOCTYPE html>
<html>
<head>
<title>猫眼专业版-实时票房</title>
<!--// dns prefetch -->
<link rel="dns-prefetch"href="//ituan" />
<link rel="dns-prefetch"href="//ituan" />
<link rel="dns-prefetch"href="//mc.meituan" />
<link rel="dns-prefetch"href="//s0.meituan" />
<link rel="dns-prefetch"href="//p0.meituan" />
<link rel="dns-prefetch"href="//p1.meituan" />
<!--// meta section -->
<meta charset="utf-8">
<meta name="keywords"content="猫眼票房分析,猫眼电影,电影票房,实时票房,⽇票房,预售票房,影⽚票房趋势,受众画像,实时排⽚,预售排⽚,上座率,历史票房<meta name="description"content="猫眼票房分析,提供最准确的每⽇电影实时票房、排⽚、上座率查询,
为电影从业者提供最及时、专业的数据分析服务"
<meta http-equiv="cleartype"content="yes" />
<meta http-equiv="X-UA-Compatible"content="IE=edge" />
<meta http-equiv="Cache-Control"CONTENT="no-cache" />
<meta http-equiv="Pragma"CONTENT="no-cache" />
<meta http-equiv="cache-control"CONTENT="no-store" />
<meta name="format-detection"content="telephone=no" />
<meta name="renderer"content="webkit">
<link rel="icon"type="image/x-icon"href="//ituan/piaofang/img/favicon.ico" />
.....
<script src="//ituan/piaofang/react/stat-6135315b.js"async></script>
<script src="//ituan/piaofang/react/felis-25543cb1.js"async></script>
</body>
</html>
这其实就是我们通过浏览器能查看到的源⽂件。但是我们会发现这个⽹页的源⽂件并不是我们的源⽂件,⽽是该⽹站进⾏了后台处理,直接
访问该链接后会被定向⾄。所以这⾥通过爬取⽹页源⽂件来获取数据的⽅式就⾏不通了。
到数据接⼝
由于现在的⽹页基本都是动态⽹页,其数据都是通过后台服务进⾏获取的,所以我们想办法到他对应的数据接⼝直接获取数据就⾏了。
那么我们继续⽤数据点击的⽅式进⼊到这个⽹址,然后打开开发者⼯具,选择Network标签页,对⽹页进⾏抓包。
这个时候,将监听窗⼝的滚动条拖⾄最底部,然后在⽹页上选择⼀个时间,来查看他脚本执⾏情况。
我们选择2017年8⽉2⽇,这个时候⽹页判定到⽇期发⽣改变,需要重新获取数据,就会去调⽤它的数据接⼝,我们在监听窗⼝⾥就会发现它。
我们会发现这么⼀条记录,传递了时间参数,且为我们指定的⽇期2017-08-02
我们访问这个地址,再看它的详细信息,发现确实是我们想要的数据。返回的是⼀个json结果集。
我们修改它的时间参数,发现它也能正常运⾏,并返回相应的结果。
编写我们的代码,将数据获取:
#-*- coding: utf-8 -*-
import urllib
import json
url = 'piaofang.maoyan/dayoffice?date=2017-08-01'
def getData(url):
page = urllib.urlopen(url)
data = ad()
return data
if __name__ == "__main__":
data = getData(url)
print data
执⾏后,我们会看到数据已经被获取
runfile('C:/Users/Administrator/.spyder2/temp.py', wdir='C:/Users/Administrator/.spyder2')
安卓在线解析json
{"ticketDesc":"<div class='logo'>\n    <span id=\"dayStr\"class=\"today\">\n        2017-08-01\n        周⼆\n    </span>\n    <span>⼤盘:</span>\n    <
数据解析
数据得到了,但是会有很多我们不需要的数据,我们就要对他进⾏解析,挖出我们需要的数据。
我们将得到的Json数据复制到在线解析平台去查看下他的内容:
发现在ticketList⾥⾯的书就是我们想要的⽹页表格数据,但他的形式是html的,⽽不是数据形式,所以我们还要对html的内容进⾏解析。
那么⾸先要将Html内容从Json⾥获取出来,于是新增⽅法:
def getHtml(jsonData):
data = json.loads(jsonData)
return data['ticketList'].encode('utf-8').replace('\n', '')
if __name__ == "__main__":
data = getData(url)
getHtml(data)
执⾏后,发现我们成功得到了Html内容,并将内容中多余的\n去掉。
In [401]:runfile('C:/Users/Administrator/.spyder2/temp.py', wdir='C:/Users/Administrator/.spyder2')
<ul class="canTouch"data-com="hrefTo,href:'/movie/344264?_v_=yes'"><li class='c1'><b>战狼2</b><br><em>上映6天</em><em style ......
现在我们要做的就是解析这个Html获取我们需要的数据了。我们可以发现数据的规律是,电影存放在ul中,⽽每⼀个数据单独存放于li中
的,于是需要⽤到正则表达式进⾏解析。
添加解析⽅法:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。