使用网站提供的API爬取网站中的数据是一种操作较为简单直接的方式,例如豆瓣网提供了对于电影、书籍等资源的各种数据的API,我们可以通过调用API来得到所需的数据,代码的编写也较灵活简洁。通过API获取数据的缺点是有些网站会限制API调用的次数和频率,用户需要付费来升级成高级用户来获取更灵活的API调用。
一.使用Jupyter Notebook编写Python
Jupyter Notebook是一个交互式的笔记本,可以理解成是一个IDE,支持40多种语言
1.安装
conda install jupyter
2.运行
jupyter notebook
输入以上命令即可在浏览器中打开编辑器
点击右上角New新建Python 3的Notebook后即可开始编写代码
Xshot-0004.png
二. 豆瓣电影TOP250数据爬取
先引入一个urllib的包来发送http请求
urllib是一个包含几个模块来处理请求的库。分别是:
urllib.request 发送http请求
urllib.error 处理请求过程中,出现的异常。
urllib.parse 解析url
urllib.robotparser 解析robots.txt 文件
import urllib.request as request
为使结果以json格式显示,于是添加以下代码
import json
print(json.loads(crawl_content.decode('utf8')))
爬取数据
import urllib.request as request
import json
url = 'https://api.douban.com/v2/movie/top250'
crawl_content = request.urlopen(url).read()
movies = json.loads(crawl_content.decode('utf8'))['subjects']
for movie in movies:
print(json.loads(crawl_content.decode('utf8')))
得到部分结果如下:
Xshot-0005.png
为使结果更简洁,只提取电影名称、年份、类型、评分四项数据,将代码修改如下:
import urllib.request as request
import json
url = 'https://api.douban.com/v2/movie/top250'
crawl_content = request.urlopen(url).read()
movies = json.loads(crawl_content.decode('utf8'))['subjects']
for movie in movies:
print(movie['title'],movie['year'],movie['genres'],movie['rating']['average'])
得到结果:
Xshot-0006.png
从结果可看出豆瓣的API允许用户获取前20项结果的数据
网友评论