通过phantom无头浏览器爬取豆瓣页面,分析页面结构来解析并输出json类型数据
豆瓣之前有提供官方开放API,虽然每天调用接口有上限,但是至少可以使用,后来不知为何突然关闭了且不允许个人申请。但是笔者有部分个人项目使用相关的接口,所以突然关闭给笔者带来了不小的困扰,难道又要回到以前刀耕火种的年代吗?显然不能接受,在Google and 百度无果后决定自己写个相关的爬虫服务
- node >= 8.9.2
- 安装phantom无头浏览器,安装文档
- git clone [email protected]:wanglin2/douban_api.git
- cd douban_api
- npm i
- npm start
config
: 项目的配置信息middlewares
: 中间件函数controllers
: 路由转发models
: 接口逻辑routes
: 路由utils
: 公共工具函数app.js
: 入口文件
- /book 书籍部分接口
- /movie 影视部分接口
- /music 音乐部分接口
- 描述:只有概要信息。豆瓣分页比较迷,如果页数较大的情况下是不会透出所有页数的,所以该接口统一不透出总页数数据,所以当请求某一页没有数据时那之前的一页应该就是最后一页。平均请求耗时:5s
- 接口:/book/list?key=&page=
- ---key:搜索关键词
- ---page:当前请求页数
- 响应实例:
{
"status": true,
"msg": "获取成功",
"time": "5.364s",
"data": [
{
"cover_link": "https://book.douban.com/subject/4913064/",
"cover": "https://img3.doubanio.com/view/subject/l/public/s29053580.jpg",
"rating": "9.3",
"title": "活着",
"author": "余华",
"press": "作家出版社",
"date": "2012-8-1",
"price": "20.00元"
},
{
"cover_link": "https://book.douban.com/subject/1029791/",
"cover": "https://img3.doubanio.com/view/subject/l/public/s1074291.jpg",
"rating": "8.7",
"title": "许三观卖血记",
"author": "余华",
"press": "南海出版公司",
"date": "1998-9",
"price": "16.80元"
}
]
}
- 描述:获取某本书籍的详细信息,url来自list或list_pro接口。平均请求耗时:6s
- 接口:/book/detail?url=
- ---url:豆瓣详情页URL
- 响应实例:
{
"status": true,
"msg": "获取成功",
"time": "6.663s",
"data": {
"title": "活着",
"pic": "https://img3.doubanio.com/view/subject/l/public/s29053580.jpg",
"作者": "余华",
"出版社": "作家出版社",
"出版年": "2012-8-1",
"页数": "191",
"定价": "20.00元",
"装帧": "平装",
"丛书": "余华作品(2012版)",
"ISBN": "9787506365437",
"rating": "9.3",
"content_intro": "《活着(新版)》讲述了农村人福贵悲惨的人生遭遇。福贵本是个阔少爷,可他嗜赌如命,终于赌光了家业,一贫如洗。他的父亲被他活活气死,母亲则在穷困中患了重病,福贵前去求药,却在途中被国民党抓去当壮丁。经过几番波折回到家里,才知道母亲早已去世,妻子家珍含辛茹苦地养大两个儿女。此后更加悲惨的命运一次又一次降临到福贵身上,他的妻子、儿女和孙子相继死去,最后只剩福贵和一头老牛相依为命,但老人依旧活着,仿佛比往日更加洒脱与坚强。《活着(新版)》荣获意大利格林扎纳•卡佛文学奖最高奖项(1998年)、台湾《中国时报》10本好书奖(1994年)、香港“博益”15本好书奖(1994年)、第三届世界华文“冰心文学奖”(2002年),入选香港《亚洲周刊》评选的“20世纪中文小说百年百强”、中国百位批评家和文学编辑评选的“20世纪90年代最有影响的10部作品”。",
"author_intro": "余华,1960年出生,1983年开始写作。至今已经出版长篇小说4部,中短篇小说集6部,随笔集4部。主要作品有《兄弟》《活着》《许三观卖血记》《在细雨中呼喊》等。其作品已被翻译成20多种语言在美国、英国、法国、德国、意大利、西班牙、荷兰、瑞典、挪威、希腊、俄罗斯、保加利亚、匈牙利、捷克、塞尔维亚、斯洛伐克、波兰、巴西、以色列、日本、韩国、越南、泰国和印度等国出版。曾获意大利格林扎纳·卡佛文学奖(1998年)、法国文学和艺术骑士勋章(2004年)、中华图书特殊贡献奖(2005年)、法国国际信使外国小说奖(2008年)等。",
"dirs": ["中文版自序", "韩文版自序", "日文版自序", "英文版自序", "麦田新版自序", "活着", "外文版评论摘要"],
"tags": ["余华", "活着", "人生", "人性", "中国文学", "小说", "社会", "当代文学"]
}
}
- 描述:描述同书籍对应接口。平均请求耗时:5s
- 接口:/movie/list?key=&page=
- ---key:搜索关键词
- ---page:当前请求页数
- 响应实例:
{
"status": true,
"msg": "获取成功",
"time": "5.372s",
"data": [
{
"cover_link": "https://movie.douban.com/subject/4864908/",
"cover": "https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2530513100.jpg",
"rating": "7.2",
"title": "影 ",
"country": "中国大陆",
"type": ["香港", "剧情", "动作", "武侠", "古装", "三国·荆州", "荆州保卫战"],
"duration": "116分钟",
"year": "2018",
"actors": ["张艺谋", "邓超", "孙俪", "郑恺", "王千源", "王景春", "胡军", "关晓彤", "吴磊"]
},
{
"cover_link": "https://movie.douban.com/subject/24719063/",
"cover": "https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2262236348.jpg",
"rating": "8.0",
"title": "烈日灼心 ",
"country": "中国大陆",
"type": ["剧情", "犯罪", "悬疑", "不法之徒", "法外之徒"],
"duration": "139分钟",
"year": "2015",
"actors": ["曹保平", "邓超", "段奕宏", "郭涛", "王珞丹", "吕颂贤", "高虎", "白柳汐", "杜志国"]
}
]
}
- 描述:描述同书籍对应接口。平均请求耗时:6s
- 接口:/movie/detail?url=
- ---url:豆瓣详情页URL
- 响应实例:
{
"status": true,
"msg": "获取成功",
"time": "9.082s",
"data": {
"title": "影(2018)",
"pic": "https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2530513100.jpg",
"导演": "张艺谋",
"编剧": "李威/张艺谋",
"主演": "邓超/孙俪/郑恺/王千源/王景春/胡军/关晓彤/吴磊/封柏更多...",
"类型": "剧情/动作/武侠/古装",
"制片国家/地区": "中国大陆/香港",
"语言": "汉语普通话",
"上映日期": "2018-09-30(中国大陆)/2018-09-06(威尼斯电影节)",
"片长": "116分钟",
"又名": "三国·荆州/荆州保卫战/Shadow",
"IMDb链接": "tt6864046",
"rating": "7.2",
"content_intro": "战乱年代,群雄并起。割据一方的沛国安于现状,一任国主沛良(郑恺饰)慨歌太平。要冲之地境州早年为强邻炎国借去,而今据而不还。沛国都督子虞(邓超饰)前往讨伐,却中了对方大将杨苍(胡军饰)的拖刀,重伤不愈。心有不甘的子虞暗中派出替身境州(邓超饰)假扮自己,总理军政,内则使令夫人小艾(孙俪饰)襄助。真假子虞切磋战法,寻求破解杨苍刀法的绝技。而另一方面,沛良恼怒子虞私自约战杨苍,不惜将妹妹青萍(关晓彤饰)嫁于杨苍之子为妾媾和。淫雨霏霏,连日不开。境州上空,杀戮与机谋纠缠撕裂……本片根据朱苏进的剧本《三国•荆州》改编。©豆瓣",
"acting_staff": ["张艺谋", "邓超", "孙俪", "郑恺", "王千源", "王景春"],
"imgs": ["https://img3.doubanio.com/view/photo/sqxs/public/p2515009651.jpg", "https://img3.doubanio.com/view/photo/sqxs/public/p2464122341.jpg"]
}
}
- 描述:描述同书籍对应接口。平均请求耗时:5s
- 接口:/music/list?key=&page=
- ---key:搜索关键词
- ---page:当前请求页数
- 响应实例:
{
"status": true,
"msg": "获取成功",
"time": "6.561s",
"data": [
{
"cover_link": "https://music.douban.com/subject/1403307/",
"cover": "https://img3.doubanio.com/view/subject/m/public/s3750422.jpg",
"rating": "9.2",
"title": "范特西 Fantasy",
"artist": "周杰伦",
"date": "2001-09-14",
"album": "专辑",
"medium": "CD",
"schools": "流行"
},
{
"cover_link": "https://music.douban.com/subject/1401853/",
"cover": "https://img3.doubanio.com/view/subject/m/public/s3737076.jpg",
"rating": "8.1",
"title": "七里香 Common Jasmin Orange",
"artist": "周杰伦",
"date": "2004",
"album": "专辑",
"medium": "CD",
"schools": "流行"
}
]
}
- 描述:描述同书籍对应接口。平均请求耗时:6s
- 接口:/music/detail?url=
- ---url:豆瓣详情页URL
- 响应实例:
{
"status": true,
"msg": "获取成功",
"time": "9.652s",
"data": {
"title": "七里香",
"pic": "https://img3.doubanio.com/view/subject/m/public/s3737076.jpg",
"又名": "CommoJasmiOrage",
"表演者": "周杰伦",
"流派": "流行",
"专辑类型": "专辑",
"介质": "CD",
"发行时间": "2004",
"出版者": "上海声像出版社",
"唱片数": "1",
"条形码": "9787799415932",
"ISRC(中国)": "",
"其他版本": "周杰伦:七里香(精装版,附赠2首最新MV)(全部)",
"rating": "8.1",
"content_intro": "從第一張JAY同名專輯、第二張《范特西》、第三張《八度空間》到第四張《葉惠美》專輯,周杰倫每一次的專輯名稱都給了歌迷許多想像空間,也給了大家許多驚嘆號,這一次第五張專輯周杰倫首次以主打歌名「七里香」做為專輯名稱,周杰倫表示因為對這一次專輯的音樂充滿自信,希望大家能把注意力焦點放在音樂上,將話題回歸到音樂上。 新歌「七里香」是帶著東方氣息的抒情搖滾曲風,周杰倫的最佳搭檔方文山在「七里香」歌曲裡首度以「作詩」的方式填詞,創作出一首詩意濃厚的現代詩情歌。而此曲之MV特別遠赴日本的群馬縣高崎市拍攝。",
"songs": ["1.我的地盘", "2.七里香", "3.借口", "4.外婆", "5.将军", "6.搁浅", "7.乱舞春秋", "8.困兽之斗", "9.园游会", "10.止战之殇"]
}
}
接口和其他的类似,不过无法分页请求。
- 搜索游戏:/game/list?key=
- 查询游戏详情:/game/detail?url=
- 修改/config/config.js文件中的
corsWhiteList
字段,在数组中增加需要跨域的域名,如:https://lxqnsys.com
- 因为是通过爬取页面来抓取数据,所以会有以下问题:
- --数据较慢,且有一定失败概率
- --因为是通过分析页面结构来输出数据,页面结构很容易变动,所以相当不稳定,所以使用场景慎重考虑
- MIT License