×× 前几天看了一下豆瓣电影的内容,想从豆瓣电影的分类排行榜 · · · · · 中爬取多一点的电影信息。点击一个类型进去之后发现它里面的电影信息时需要你不断往下拉动滚动条之后才会动态地加载更多的电影信息并显示出来。
观察了一下发现了它采用的是AJAX异步请求(通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新).这样就导致了查看到源代码内容(因为它是静态的)与网页内容不同。
F12之后发现了可疑的js文件,如下:
通过浏览器打开这个js文件发现它的里面就是从服务器端返回的电影信息的一个json对象数组。这个js文件的url是这样的:
https://movie.douban.com/j/chart/top_list?type=24&interval_id=100%3A90&action=&start=20&limit=20
每个这样的url除了start和limit后面的数字不一致之外其他的都相同,那么这两个数据表示的是什么呢???我想答案应该是从第20个电影信息开始往后读取20个电影的信息!
那么问题来了?!
那么这个url怎么获取呢???
1> 知道了这个url我们就不需要从网页源代码中去寻找电影的信息,每个类型的电影下面构造这样的url直接connect接收返回的json数据,分析json数据然后从json对象数组中提取电影信息。
2>每个类型下面的电影总数怎么知道?知道了这种类型有多少个电影之后直接将start=0&limit=电影总数,就可以一次返回所有的电影信息的json数据。
3> 通过观察发现了一个这样的js文件:
点击这个count的url之后发现这个里面就是每个类型的电影总数,
这里面的total就是电影总数。
4> 这样我们就可以开始敲代码了。
!首先进入到有各种类型的页面(也就是这样的)
public class Test {
private static HashMap<String,String> urlandnames = new H