前几天在某公众号上看到了对《战狼2》的数据分析,涉及人群,观看时间,影评,地点等等,分析的超级棒,所以就想着数据分析是一件很有说话权的事情。作为这方面的小白,决定抽时间学习一番。于是乎,通过博客来记录一下自己的学习路程。
其实就是跟着网课的操作笔记
这次是基于网站API抓取《摔跤吧!爸爸》的豆瓣评分情况
首先,我们需要了解豆瓣API的说明。
豆瓣API说明:/wiki/?title=movie_v2
可以看到豆瓣电影的sourceurl的格式为:
这也就是说,不同的电影的API链接只是最后的id不同。
我们来看一下《摔跤吧!爸爸》的id:26387939
按照豆瓣API的格式,打开《摔跤吧!爸爸》的JSON看一下:
当然,我们还是希望能直接通过代码的方式来访问这个API,而不是通过我们的查询来查看,怎么做呢?python提供给我们一个对URL进行访问的工具包:urllib
下面,介绍urllib这个包的调用方法:
我们通过一个具体的实例说明urllib这个工具包的使用。
通过Jupyter这个可视化工具来编写代码,安装Anaconda的时候已经默认安装好了,改一下工作路径,运行jupyter-notebook.exe文件,重新new一个python文件,就可以看到编写界面了。
运行下述这段代码(ctrl+Enter运行),可以看到结果为:
importurllib.request
asurlrequest
url_visit =
'/v2/movie/26387939'crawl_content = urlrequest.urlopen(url_visit).read()
print(crawl_content.decode(
'utf8'))
因为有中文编码的问题,所以采用另一种编码方式:
importurllib.request
asurlrequest
url_visit =
'/v2/movie/26387939'crawl_content = urlrequest.urlopen(url_visit).read()
print(crawl_content.decode(
'unicode-escape'))
可以看到这时可以正常显示中文了。
上述我们抓取到的是JSON格式。
那么,如何从这个JSON格式中,得到我们想要的信息呢?利用json这个工具包
下面阐述json这个工具包的使用。
这个包是python自带的,不需要单独安装
在我们之前的python文件中新建一个cell:
运行下述这段代码(ctrl+Enter运行),可以看到结果为:
importjson
json_content = json.loads(crawl_content.decode(
'utf8'))
rating = json_content[
'rating'][
'average']
print(rating)
即,得到我们想要获取的评分。
如果我们想要把抓取的结果保存到文件当中应该怎么做呢?
运行下面代码,将电影id和评分保存到txt文件中:
id=
26387939rating=json_content[
'rating'][
'average']
withopen(
"movie_score.txt",
"a")
asoutputfile:
outputfile.write(
"{} {}\n".format(id, rating))
我们可以查看一下movie_score.txt这个文件,看是否保存到了我们想要的信息。
这个movie_score.txt在哪个路径下呢?
这时我们看到,我们已经成功把想要获取的内容保存到了txt文件当中:
如果有多个电影的,怎样通过循环的方式来获取它们的评分呢?
运行这段代码:
#调用 urllib 和 jsonimporturllib.request
asurlrequest
importjson
#将需要爬取的电影写入列表,方便后面依次使用id_list=[
26387939,
11803087,
20451290]
#创建一个写入评分的文件 douban_movie_rank.txtwithopen(
"douban_movie_rank.txt",
"w")
asoutputfile:
#写一个for循环,分别抓取不同电影的评分,与上面爬取单个电影相同for
id
inid_list:
url_visit =
'/v2/movie/{}'.format(id)
crawl_content = urlrequest.urlopen(url_visit).read()
json_content = json.loads(crawl_content.decode(
'utf8'))
rank=json_content[
'rating'][
'average']
outputfile.write(
"{} {}\n".format(id, rank))
查看一下txt中的内容:每一个电影id后都有其评分
当然,也可以通过指定影片名来得到其豆瓣得分: