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

就是上面的商务出行 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

使用JAVA爬取去哪儿网入住信息的更多相关文章

  1. 使用 Scrapy 爬取去哪儿网景区信息

    Scrapy 是一个使用 Python 语言开发,为了爬取网站数据,提取结构性数据而编写的应用框架,它用途广泛,比如:数据挖掘.监测和自动化测试.安装使用终端命令 pip install Scrapy ...

  2. Python的scrapy之爬取链家网房价信息并保存到本地

    因为有在北京租房的打算,于是上网浏览了一下链家网站的房价,想将他们爬取下来,并保存到本地. 先看链家网的源码..房价信息 都保存在 ul 下的li 里面 ​ 爬虫结构: ​ 其中封装了一个数据库处理模 ...

  3. 32、出任爬虫公司CEO(爬取职友网招聘信息)

    职友集,搜索到全国上百家招聘网站的最新职位.   https://www.jobui.com/rank/company/   打开网址后,你会发现:这是职友集网站的地区企业排行榜,里面含有     本 ...

  4. python - 爬虫入门练习 爬取链家网二手房信息

    import requests from bs4 import BeautifulSoup import sqlite3 conn = sqlite3.connect("test.db&qu ...

  5. 网络爬虫之scrapy爬取某招聘网手机APP发布信息

    1 引言 过段时间要开始找新工作了,爬取一些岗位信息来分析一下吧.目前主流的招聘网站包括前程无忧.智联.BOSS直聘.拉勾等等.有段时间时间没爬取手机APP了,这次写一个爬虫爬取前程无忧手机APP岗位 ...

  6. 爬取西刺网的免费IP

    在写爬虫时,经常需要切换IP,所以很有必要自已在数据维护库中维护一个IP池,这样,就可以在需用的时候随机切换IP,我的方法是爬取西刺网的免费IP,存入数据库中,然后在scrapy 工程中加入tools ...

  7. Java爬取校内论坛新帖

    Java爬取校内论坛新帖 为了保持消息灵通,博主没事会上上校内论坛看看新帖,作为爬虫爱好者,博主萌生了写个爬虫自动下载的想法. 嗯,这次就选Java. 第三方库准备 Jsoup Jsoup是一款比较好 ...

  8. java爬取网页内容 简单例子(2)——附jsoup的select用法详解

    [背景] 在上一篇博文java爬取网页内容 简单例子(1)——使用正则表达式 里面,介绍了如何使用正则表达式去解析网页的内容,虽然该正则表达式比较通用,但繁琐,代码量多,现实中想要想出一条简单的正则表 ...

  9. Python的scrapy之爬取顶点小说网的所有小说

    闲来无事用Python的scrapy框架练练手,爬取顶点小说网的所有小说的详细信息. 看一下网页的构造: tr标签里面的 td 使我们所要爬取的信息 下面是我们要爬取的二级页面 小说的简介信息: 下面 ...

随机推荐

  1. Qt 使用#define+qDebug()输出调试信息

    /******************************************************************************************* * Qt 使用 ...

  2. puremvc源码阅读

    1.mediator作为ui管理器,是设计成可以list多个notification 2.所有ui想要监听notification,都需要register到facade中 3.puremvc只负责消息 ...

  3. CF1130E Wrong Answer

    E Wrong Answer 注意到 \(n\geq 2\) 时才可能有解,可以按如下方式构造一个 \(a_{1,2\dots n}\): 令 \(a_1=-1\) ,而后面的数都为正.记 \(s=\ ...

  4. CF1109A Sasha and a Bit of Relax

    CF1109A Sasha and a Bit of Relax 用 \(xorsum[l,r]\) 表示 \(a[l] \oplus a[l+1] \oplus a[l+2]... a[r-1] \ ...

  5. python(三):函数

    一.函数.名称空间与作用域 1.函数的构成 python有三种层次的抽象:(1)程序可分成多个模块:(2)每个模块包含多条语句:(3)每条语句对对象进行操作.函数大致处于第二层.函数有它的定义格式.参 ...

  6. 【jQuery插件分享】Cropper——一个简单方便的图片裁剪插件

    原文:https://segmentfault.com/a/1190000012344970 插件介绍 这是一个我在写以前的项目的途中发现的一个国人写的jQuery图像裁剪插件,当时想实现用户资料的头 ...

  7. C# 汉字转拼音 方法(汉字的发音不过400多种(不算声调))

    /* * 2009年8月6日13:19:20 * 调用:this.label1.Text = DXHanZiToPinYin.DXHanZiToPinYin.Convert(this.textBox1 ...

  8. modsecurity3.0 nginx 安装

    备注: 使用的是modsecurity 3.0 的版本,也是nginx 官方推荐使用的,同时使用的是nginx 的dynamic module 1. 环境准备 https://github.com/S ...

  9. keycloak 了解

    Keycloak 是一个针对Web应用和 RESTful Web 服务提供 SSO 集成.基于 OAuth 2.0 和 JSON Web Token(JWT) 规范.目前用于实现 JBoss 与 Wi ...

  10. I/O复用——select和poll

    概述 I/O多路复用(multiplexing)的本质是通过一种机制(系统内核缓冲I/O数据),让单个进程可以监视多个文件描述符,一旦某个描述符就绪(一般是读就绪或写就绪),能够通知程序进行相应的读写 ...