收集网络资源的时我们很多时候会使用爬虫技术,随着技术的发展,恶意的爬虫模拟人的行为和浏览器的行为进行信息爬取,有时往往给被爬网站带来诸多麻烦,爬虫技术与反爬虫技术之间的战争一直在继续。为了能使网络资源得到合情合理的采集,也有很多应用或网站提供了相应的API,通过调用这些API我们就能合理地拿到想要的数据信息。
下面将借助豆瓣API进行合理地获取豆瓣读书的信息。
一、了解豆瓣API
豆瓣为开发者提供了一个开发者文档,这里面有豆瓣API的参数说明和访问控制等信息
如果要使用豆瓣的API走正规渠道是需要进行身份验证即申请APIkey的,但是目前好像不能进行申请了,但是也不影响接下来通过API获取信息的实验。
从开发者文档那里了解到豆瓣读书的一些API的构造:
下面我将通过id来获取豆瓣的图书信息;其API如下:
https://api.douban.com/v2/book/:id #id为图书的id号,例如:1220568
二、通过豆瓣读书的API获取图书信息
(1)通过php获取
<html>
<head>
</head>
<body>
<div>
<form action="">
<input type="text" name="bookid" placeholder="请输入书的id" >
<input type="submit" class="sub">
</form>
</div>
<div class="container" style="margin-top: 100px">
<?php
if(isset($_GET['bookid'])){
$bookid=$_GET['bookid'];
$url = "https://api.douban.com/v2/book/$bookid";
$data = file_get_contents($url);
echo $data;
}
?>
</div>
</body>
</html>
运行,输入图书id:1220568 结果如下图:
当输入其他的id号时同样可以获取到对应的图书信息
(2)jq+ajax跨域获取
html文件中的表单
<form >
<input type="text" name="bookid" id="bookid" >
<input type="button" id="sub" value="查询" />
</form>
js文件:
$(document).ready(function(){
document.getElementById('sub').onclick=function(){ #点击事件
Get();
}
});
function Get(){
var bookid = $("#bookid").val(); #获取表单中传递的id值
$.ajax({ #ajax跨域获取图书信息
async:false,
type : "get",
url : "https://api.douban.com/v2/book/"+bookid,
dataType:"jsonp",
success: function(result){ #result为返回的图书信息是json格式的
var data ="";
var title= result.title; #获取图书名(这里先只获取图书名和简介,其他的内容获取方式基本一致)
var summary=result.summary; #获取图书简介
data=title+summary
$("#get").html(data); #将获取到的图书名和 简介渲染到html对应的id为get的地方
},
error: function(error, data, type){
alert(data + ": " + type + "."); //type isn't giving any response.
}
});
}
结果展示: