DC学院_数据爬取2018-01-23

使用API爬取网页数据

问题:获取1000部豆瓣电影的评分

爬虫

1. 确定爬取链接

2. 读取链接指向的内容

3. 从中抽取关键元素

基于网站API的爬虫编写

1. 在网站注册开发者账户用户名,获得相应的开发者秘钥;

2. 在网站的API帮助说明文档中找到自己需要使用的API

    确认API请求的限制次数

    确认调用API需要使用的参数

3. 在联网状态下,编写代码正确调用该API

4. 从API返回的内容中获取所需属性

5. 将获取的内容存储到本地(文件或数据库)

python爬取语法

爬取用的模块为urllib。本部分参考廖雪峰的python教程:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001432688314740a0aed473a39f47b09c8c7274c9ab6aee000/

urllib的“request”模块可以方便的抓取url的内容,也即发送一个GET请求到指定的页面,然后返回HTTP响应。urllib提供的功能就是利用程序去执行各种HTTP请求,有四种方法:可以发送get请求数据;可以模拟浏览器发送GET请求;以POST发送请求;通过一个Proxy去访问网站,利用ProxyHandler处理等,详见廖雪峰的网站。

使用urlopen方法打开一个url链接,返回一个文件。文件中的数据格式为json,使用loads方法加载得到字典类型的数据。

import urllib.request as urlrequest

with request.urlopen('https://api.douban.com/v2/book/2129650') as f:

    data = f.read()

举例:爬取豆瓣电影评分

豆瓣API:https://developers.douban.com/wiki/?title=guide

使用API获得ID为1220562的书的信息, 请求的url如下:https://api.douban.com/v2/book/1220562

豆瓣电影API:https://developers.douban.com/wiki/?title=movie_v2

找到豆瓣“电影条目”信息,URI信息为/v2/movie/subject/:id,

使用API获得信息的链接就为:https://api.douban.com/v2/movie/subject/:id

使用API获得的数据格式为json格式,所以浏览器需要具有json viewer的功能。



爬取多个id的电影的评分,然后存入文件

import json

import urllib.request as urlrequest

id_list = [26280528, 6874741, 26942674, 26866011]

with open("douban_movie_rank.txt", "w") as outputfile:

    for id in id_list:

        url_visit = 'https://api.douban.com/v2/movie/subject/{}'.format(id)

        crawl_content = urlrequest.urlopen(url_visit).read()

        json_content = json.loads(crawl_content.decode('utf8'))

        rank = json_content['rating']['average']

        title = json_content['title']

        outputfile.write("{:20} {:10} {:<10}\n".format(title, id, rank))



作业:前面已经可以根据一个电影的豆瓣id来抓取它的评分,那么怎样通过电影名称来抓取评分呢?(提示:使用和“电影检索”相关的豆瓣API)

你可能感兴趣的:(DC学院_数据爬取2018-01-23)