最近工作要收集点酒店数据,就到携程上看了看,记录爬取过程去下

1.根据城市名称来分类酒店数据,所以先找了所有城市的名称
在这个网页上有http://hotels.ctrip.com/domestic-city-hotel.html

从网站地图上可以很容易发现这个页面

2.然后查看源码

发现所有需要的数据都在

<dl class = "pinyin_filter_detail layoutfix"></dl>

3.我们获取一下dl 这个元素和其中的所有子元素

我们用jsoup的jar包来解析获取的html,官网https://jsoup.org/,有API和jar包

String result = HttpUtil.getInstance().httpGet(null, "http://hotels.ctrip.com/domestic-city-hotel.html");
Document root_document = Jsoup.parse(result);
Elements pinyin_filter_elements = root_document.getElementsByClass("pinyin_filter_detail layoutfix");//包含所有城市的Element
Element pinyin_filter = pinyin_filter_elements.first();

4.我准备把获取的城市数据存储到mysql中,所以下面连接了本地mysql数据库

// 连接数据库
Connection conn = SqlDBUtils.getConnection();
StringBuilder create_table_sql = new StringBuilder();
create_table_sql.append("create table if not exists ctrip_hotel_city (id integer primary key auto_increment, city_id integer not null, city_name varchar(255) not null, head_pinyin varchar(80) not null, pinyin varchar(255) not null)");
PreparedStatement preparedStatement;
try {//每次执行删除一下表,防止数据插入重复preparedStatement = conn.prepareStatement("DROP TABLE IF EXISTS ctrip_hotel_city");preparedStatement.execute();// 创建ctrip_hotel_city表,存储城市数据preparedStatement = conn.prepareStatement(create_table_sql.toString());preparedStatement.execute();
} catch (SQLException e) {e.printStackTrace();
}

5.获取dl下所有的dt和dd,并从中提取数据库表中所需要的字段,实现存储

//拼音首字符Elements
Elements pinyins = pinyin_filter.getElementsByTag("dt");
//所有dd的Elements
Elements hotelsLinks = pinyin_filter.getElementsByTag("dd");

6.数据提取

for (int i = 0; i < pinyins.size(); i++) {Element head_pinyin = pinyins.get(i);Element head_hotelsLink = hotelsLinks.get(i);Elements links = head_hotelsLink.children();for (Element link : links) {String cityId = StringUtil.getNumbers(link.attr("href"));String cityName = link.html();String head_pinyin_str = head_pinyin.html();String pinyin_cityId = link.attr("href").replace("/hotel/", "");String pinyin = pinyin_cityId.replace(StringUtil.getNumbers(link.attr("href")), "");StringBuffer insert_sql = new StringBuffer();insert_sql.append("insert into ctrip_hotel_city (city_id, city_name, head_pinyin, pinyin) values (");insert_sql.append(cityId);insert_sql.append(", '" + cityName + "'");insert_sql.append(", '" + head_pinyin_str + "'");//此处注意汉语拼音中会有',直接插入数据库会报错,要把一个'替换为两个''insert_sql.append(", '" + pinyin.replace("'", "''") + "')");try {preparedStatement = conn.prepareStatement(insert_sql.toString());preparedStatement.execute();} catch (SQLException e) {e.printStackTrace();}}
}

7.运行后查看mysql数据库ctrip_hotel_city表,如下

至此,酒店城市获取思路已介绍完毕,下面将介绍怎么用城市获取城市所有酒店的数据,
github源码地址 https://github.com/jianiuqi/CTripSpider
博文Java数据爬取——爬取携程酒店数据(二) 中介绍了如何利用地区爬取酒店数据,并保存到了mysql数据库

Java数据爬取——爬取携程酒店数据(一)相关推荐

  1. Java数据爬取——爬取携程酒店数据(二)

    在上篇文章Java数据爬取--爬取携程酒店数据(一)爬取所有地区后,继续根据地区数据爬取酒店数据 1.首先思考怎样根据地域获取地域酒店信息,那么我们看一下携程上是怎样获得的. 还是打开http://h ...

  2. 携程酒店数据爬取2020.5

    携程酒店数据爬取2020.5 1. 开题 目前网上有好多爬取携程网站的教程,大多数通过xpath,beautifulsoup,正则来解析网页的源代码.然后我这个菜b贪方便,直接copy源码的xpath ...

  3. 干货 | 数据治理落地难?携程度假数据治理需求设计实践

    作者简介 Leon Gu,携程数据仓库专家,负责度假数据中台和数据仓库等工作,专注于大数据.数据仓库.数据治理等领域. 一.前言 携程度假包含跟团游.自由行.玩乐.门票.用车等十多条业务线,业务涵盖线 ...

  4. JAVA爬虫爬取携程酒店数据selenium实现

    在爬取携程的时候碰到很多的壁垒,接下来分析所有过程 1.根据以往经验最初想到用jsoup去解析每个HTML元素,然后拿到酒店数据,然后发现解析HTML根本拿不到id为hotel_list的div,所以 ...

  5. 爬虫第六课:爬取携程酒店数据

    首先打开携程所有北京的酒店http://hotels.ctrip.com/hotel/beijing1 简简单单,源代码中包含我们需要的酒店数据,你以为这样就结束了?携程的这些数据这么廉价地就给我们得 ...

  6. Python3+Scrapy通过代理爬取携程酒店数据

    目标:通过爬取酒店信息保存至本地mysql数据库中 目标网址:https://hotels.ctrip.com/hotel/Haikou42 首先新建scrapy项目 命令行输入:crapy star ...

  7. Nebula Graph|信息图谱在携程酒店的应用

    本文首发于 Nebula Graph Community 公众号 对于用户的每一次查询,都能根据其意图做到相应的场景和产品的匹配",是携程酒店技术团队的目标,但实现这个目标他们遇到了三大问题 ...

  8. 干货 | 携程酒店实时数仓架构和案例

    作者简介 秋石,携程数据仓库专家,关注大数据.数据仓库.数据治理等领域: 九号,携程数据技术专家,关注数据仓库架构.数据湖.数据治理: 魁伟,携程资深数据工程师,关注实时&离线大数据产品及技术 ...

  9. 爬取携程和蚂蜂窝的景点评论数据\携程评论数据爬取\旅游网站数据爬取

    本人长期出售超大量微博数据.旅游网站评论数据,并提供各种指定数据爬取服务,Message to YuboonaZhang@Yahoo.com.同时欢迎加入社交媒体数据交流群:99918768 前言   ...

最新文章

  1. 打破认知:程序设计 #x3D; 算法 + 数据结构?
  2. IVs提取合并工具ivstools
  3. Makefile —— Makefile的规则是什么?make是如何工作的?make的工作方式是什么?
  4. 深度学习在自然语言处理的应用
  5. (JavaWeb)ServletContext对象
  6. 550 黑苹果_HFP虾青素原液 | 多年黑黄皮,熬夜肌都能轻松变白!
  7. java des对称加密_JAVA加密解密DES对称加密算法
  8. SpringCloud面试题分享
  9. oracle11.2.03,升级Oracle11.2.0.3后遭遇ORA-00600[kfioTranslateIO03][17090]
  10. SourceTree使用笔记 ssh-key配置
  11. Linux安装卸载jdk1.8
  12. 股指期货基差和升贴水介绍
  13. ckplayer 播放视频
  14. 大数据的监控和数据准确性保证
  15. Java异常 | JedisException: Could not get a resource from the pool
  16. C语言中strstr函数功能及用法
  17. 来了小老弟,送40本技术畅销书!
  18. Pycharm中c、m、F、f、v、p分别代表的含义
  19. 5.0学习外语的最好方法(我认为)欢迎pk
  20. ise生成msk文件的用处_cmsis-posmsk-codegen-为寄存器生成Pos和Msk定义的小型实用程序,特别是对于CMSIS项目-Mete Balci...

热门文章

  1. 2020届华为秋招数字芯片面试经验
  2. 程序员是怎样撩到一个女朋友的?
  3. 身份证号码中,年龄、性别的提取方法
  4. usb连接计算机充电,科技:通过USB-C为笔记本电脑充电:这是您需要知道的
  5. 三星s6 android 5.1.1,或开放特性 三星S6欲推安卓5.1.1
  6. vue中 process.env与process.VUE_CLI_SERVICE
  7. Robotium源码分析之Instrumentation进阶
  8. 《乐高EV3机器人搭建与编程》——1.5 主控器和电池
  9. 程序员入门有年龄限制吗?
  10. Win7设置AHCI模式启动