使用JAVA爬取去哪儿网入住信息

昨天帮一个商科同学爬取去哪儿网站的所有广州如家快捷酒店的所有入住信息。

就是上面的商务出行 xxx年入住这些东西

然而去哪儿的前端很强,在获取所有如家快捷酒店的时候就遇到了问题。

他显示的酒店列表是js动态加载的,按了下一页之后,网站本来的url不变的。所以更新了的那部分内容获取不到。

抓包看了一下,返回的酒店信息竟然都是加密的。

Selenium试了也不行。

所以通过爬取获取所有酒店网页的url是不行咯。

只能通过手动打开酒店的url ,在获取下面的评论信息。第一页的酒店URL可以直接获得的,大概30条,然而总共才40多个酒店而已,不算麻烦。

仔细观察发现

<li><a href="http://hotel.qunar.com/city/guangzhou/dt-15216/">如家快捷广州琶洲会展中心店[</a><a href="http://review.qunar.com/hotel_guangzhou_15216.html">如家快捷广州琶洲会展中心店 点评</a>]位于广州市海珠区新港东路路1066号。<a href="http://homeinns.hotel.qunar.com/">[如家快捷酒店]</a></li>
<li><a href="http://hotel.qunar.com/city/guangzhou/dt-15195/">如家快捷广州番禺厦滘地铁站沙溪国际酒店用品城店[</a><a href="http://review.qunar.com/hotel_guangzhou_15195.html">如家快捷广州番禺厦滘地铁站沙溪国际酒店用品城店 点评</a>]<a href="http://homeinns.hotel.qunar.com/">[如家快捷酒店]</a></li>
<li><a href="http://hotel.qunar.com/city/guangzhou/dt-9289/">如家快捷广州滨江西路人民桥文化公园地铁站店[</a><a href="http://review.qunar.com/hotel_guangzhou_9289.html">如家快捷广州滨江西路人民桥文化公园地铁站店 点评</a>]座落珠江河畔,步行10分钟达上下九步行街,乘地铁15分钟可达琶洲会展中心,火车站20分钟车程即可到达。<a href="http://homeinns.hotel.qunar.com/">[如家快捷酒店]</a></li>
<li><a href="http://hotel.qunar.com/city/guangzhou/dt-2064/">如家快捷广州白云路团一大广场地铁站店(原广州白云路店)

这些酒店URL只是后缀的数字不同而已,这个发现后面很有用哦。

然后看评论信息

评论的部分也是js动态加载的,不过幸好这部分没有加密!!!!!

而且发现了评论部分返回JSON信息

某酒店第一页评论是这样的:

http://review.qunar.com/api/h/guangzhou_2372/detail/rank/v1/page/1?__jscallback=jQuery183025870453706011176_1448419850826&rate=all&onlyGuru=false&_=1448419874133

然后发现,第二页是这样的:

http://review.qunar.com/api/h/guangzhou_2372/detail/rank/v1/page/2?__jscallback=jQuery183025870453706011176_1448419850826&rate=all&onlyGuru=false&_=1448419874133

所以通过循环,从1到最后一页评论,就能得到所有的评论数据了

其实不用解析JSON那么麻烦

用正则表达式 Pattern pattern = Pattern.compile("[0-9]+年[0-9]+月"); 就能把里面的入住信息提取出来了

至于后来的统计每年多少人入住之类的,就很简单了。

对于其他酒店

http://review.qunar.com/api/h/guangzhou_"酒店的编号"/detail/rank/v1/page/"页码"?__jscallback=jQuery183025870453706011176_1448419850826&rate=all&onlyGuru=false&_=1448419874133

所以,我们只需知道酒店编号和评论的页数,就能获取所有的评论数据了。

我把关于一个酒店评论里面所有入住日期的信息下载到一个文件里面封装成了这个函数:

//第一页评论 第n页评论 酒店编号 文件名

rujia.getData(1,41,11880,"如家快捷广州天河客运站店.txt");

txt文件内容如下:

2014年03月
2014年09月
2015年06月
2015年05月
2014年09月
2012年10月
2014年09月
2015年06月
2015年06月
2014年11月
2014年02月
2014年07月
2015年11月
2015年11月
2015年10月
2015年10月
2015年10月
2015年10月
2015年10月
...
2014年05月
2014年05月
2014年05月
2014年04月
2014年03月
2014年02月
2013年12月
商务
商务
独自
...
商务
商务
夫妻
夫妻
夫妻
2015: 132
2014: 264
2013: 5
2012: 1
2011: 0
2010: 0
独自旅行: 4
朋友结伴: 5
夫妻/情侣: 9
商务出行: 9

原文地址:https://www.cnblogs.com/wzben/p/4996429.html