12.利用API抓取数据

随着 JavaScript 和 Ajax 内容的生成和加载变得越来越普遍,解决该问题的方法之一:利用 Selenium 让浏览器自动加载网站并获取数据。
本章完全不用理会 JavaScript(没有必要运行甚至是加载 JavaScript),直接获得数据源:生成数据的 API。
1.API概述
API 定义了允许一个软件与另一个软件通信的标准语法,即便是这两个软件是用不同的语言编写的或者是架构不同。
本篇重点介绍 Web API(特别是允许 Web 服务器与浏览器交流的 API),,在其他上下文中,API 也会被用作一个通用的词,指允许 Java 程序与 Python 程序在同一台机器上通信的接口。API 并不一定是“跨网络的”,也并不总是涉及任何 Web 技术。
API 的文档通常将路由或者端点(endpoint)描述为你可以请求的 URL,而变量参数要么是 URL 路径,要么是 GET 请求的参数。例如以下两个链接pathparam分别作为路由路径里的一个参数,以及作为param1的参数值。(传递变量数据)

http://example.com/the-api-route/pathparam
http://example.com/the-api-route?param1=pathparam

API 的响应通常是 JSON 或者 XML 格式的。很多 API 允许你通过改变一个参数来改变响应类型。两种格式示例如下:

{“user”:{“id”: 123, “name”: “Ryan Mitchell”, “city”: “Boston”}}

<user><id>123</id><name>Ryan Mitchell</name><city>Boston</city></user>

(1)HTTP方法和API
利用 HTTP 从 Web 服务器获取信息有 4 种方式(或方法):

  • GET,GET 请求对服务器数据库的信息不会有任何影响。只是读取信息。
  • POST,当你填写表单或提交信息到 Web 服务器的后端程序时,使用的就是 POST。用API 发起一个 POST 请求,相当于说“请把这个信息保存到你的数据库里”。
  • PUT,PUT 请求用来更新一个对象或信息。例如更新老用户邮箱地址。
  • DELETE,DELETE 用于删除对象。DELETE 方法在公共 API 里面不常用,公共 API 主要用于传播信息或者允许用户创建或发布信息,而不是让用户删掉数据库中的信息。
  • (技术上看,不止存在以上 4 种方式(例如 HEAD、OPTIONS 和 CONNECT),但很少用,大多数 API 仅提供了以上 4 种方法,甚至是这 4 种方法的一个子集。)

GET 请求不同,除了你请求数据的 URL 或路由以外,POST、PUT 和 DELETE 请求还允许你在请求体中发送其他信息。
和你从 Web 服务器接收到的响应一样,请求体中的这个数据通常也是 JSON 格式的,有时是 XML 格式的,而且数据的格式是在 API 的语法中定义好的。
例如,用一个 API创建博客文章的评论,可能会发送一个 PUT 请求到:
http://example.com/comments?post=123
请求体为:
{“title”: “Great post about APIs!”, “body”: “Very informative. Really helped me out with a tricky technical challenge I was facing. Thanks for taking the time to write such a detailed blog post about PUT requests!”, “author”: {“name”: “Ryan Mitchell”, “website”: “http://pythonscraping.com”, “company”: “O’Reilly Media”}}
这里博客文章的 ID(123)作为参数传入 URL,即你做出的新评论的内容通过请求
体传送。参数和数据可以在参数变量和请求体中同时传送。而需要哪些参数以及在哪里传送依然是由 API 的语法决定的。

(2)更多关于API响应的介绍
API 的一个重要特性是会返回格式良好的响应。最常见的响应格式是 XML(eXtensible Markup Language,可扩展标记语言)和JSON(JavaScript Object Notation,JavaScript 对象表示法)。
JSON比XML受欢迎,一个是因为JSON文件通常比XML文件小。另一个原因是Web技术的改变(过去,服务器端用 PHP和 .NET 这些程序作为 API 的接收端。现在,服务器端也会用一些 JavaScript 框架作为 API的发送和接收端,比如 Angular 或 Backbone 等。像 Backbone 之类的 JavaScript 库处理 JSON 要比处理 XML 简单。)、
API 的响应类型受限于创建它的程序员的想象力。CSV 是另外一种典型的响应输出。一些 API 甚至被设计用来生成文件输出。一个请求可能是要求服务器生成一幅带有特
定文本的图像,或者请求特定的 XLSX 或 PDF 文件。一些API则完全没有响应。
如果API没有很好地进行配置,可能会使不可解析的栈跟踪或普通英文文本,当向 API 发出一个请求时,明智的做法通常是首先检查你得到的响应是 JSON 格式(或者是 XML、CSV 或其他你期望的格式)。
2.解析JSON数据
淘宝IP地址库网站查IP的API,用Python的 JSON 解析函数来解码:

import json 
from urllib.request import urlopen

def getCountry(ipAddress):
	response = urlopen('http://ip.taobao.com/service/getIpInfo.php?ip=' + ipAddr
  • 1
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值