Java数据爬取——爬取携程酒店数据(一)
最近工作要收集点酒店数据,就到携程上看了看,记录爬取过程去下
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数据爬取——爬取携程酒店数据(一)相关推荐
- Java数据爬取——爬取携程酒店数据(二)
在上篇文章Java数据爬取--爬取携程酒店数据(一)爬取所有地区后,继续根据地区数据爬取酒店数据 1.首先思考怎样根据地域获取地域酒店信息,那么我们看一下携程上是怎样获得的. 还是打开http://h ...
- 携程酒店数据爬取2020.5
携程酒店数据爬取2020.5 1. 开题 目前网上有好多爬取携程网站的教程,大多数通过xpath,beautifulsoup,正则来解析网页的源代码.然后我这个菜b贪方便,直接copy源码的xpath ...
- 干货 | 数据治理落地难?携程度假数据治理需求设计实践
作者简介 Leon Gu,携程数据仓库专家,负责度假数据中台和数据仓库等工作,专注于大数据.数据仓库.数据治理等领域. 一.前言 携程度假包含跟团游.自由行.玩乐.门票.用车等十多条业务线,业务涵盖线 ...
- JAVA爬虫爬取携程酒店数据selenium实现
在爬取携程的时候碰到很多的壁垒,接下来分析所有过程 1.根据以往经验最初想到用jsoup去解析每个HTML元素,然后拿到酒店数据,然后发现解析HTML根本拿不到id为hotel_list的div,所以 ...
- 爬虫第六课:爬取携程酒店数据
首先打开携程所有北京的酒店http://hotels.ctrip.com/hotel/beijing1 简简单单,源代码中包含我们需要的酒店数据,你以为这样就结束了?携程的这些数据这么廉价地就给我们得 ...
- Python3+Scrapy通过代理爬取携程酒店数据
目标:通过爬取酒店信息保存至本地mysql数据库中 目标网址:https://hotels.ctrip.com/hotel/Haikou42 首先新建scrapy项目 命令行输入:crapy star ...
- Nebula Graph|信息图谱在携程酒店的应用
本文首发于 Nebula Graph Community 公众号 对于用户的每一次查询,都能根据其意图做到相应的场景和产品的匹配",是携程酒店技术团队的目标,但实现这个目标他们遇到了三大问题 ...
- 干货 | 携程酒店实时数仓架构和案例
作者简介 秋石,携程数据仓库专家,关注大数据.数据仓库.数据治理等领域: 九号,携程数据技术专家,关注数据仓库架构.数据湖.数据治理: 魁伟,携程资深数据工程师,关注实时&离线大数据产品及技术 ...
- 爬取携程和蚂蜂窝的景点评论数据\携程评论数据爬取\旅游网站数据爬取
本人长期出售超大量微博数据.旅游网站评论数据,并提供各种指定数据爬取服务,Message to YuboonaZhang@Yahoo.com.同时欢迎加入社交媒体数据交流群:99918768 前言 ...
最新文章
- 打破认知:程序设计 #x3D; 算法 + 数据结构?
- IVs提取合并工具ivstools
- Makefile —— Makefile的规则是什么?make是如何工作的?make的工作方式是什么?
- 深度学习在自然语言处理的应用
- (JavaWeb)ServletContext对象
- 550 黑苹果_HFP虾青素原液 | 多年黑黄皮,熬夜肌都能轻松变白!
- java des对称加密_JAVA加密解密DES对称加密算法
- SpringCloud面试题分享
- oracle11.2.03,升级Oracle11.2.0.3后遭遇ORA-00600[kfioTranslateIO03][17090]
- SourceTree使用笔记 ssh-key配置
- Linux安装卸载jdk1.8
- 股指期货基差和升贴水介绍
- ckplayer 播放视频
- 大数据的监控和数据准确性保证
- Java异常 | JedisException: Could not get a resource from the pool
- C语言中strstr函数功能及用法
- 来了小老弟,送40本技术畅销书!
- Pycharm中c、m、F、f、v、p分别代表的含义
- 5.0学习外语的最好方法(我认为)欢迎pk
- ise生成msk文件的用处_cmsis-posmsk-codegen-为寄存器生成Pos和Msk定义的小型实用程序,特别是对于CMSIS项目-Mete Balci...
热门文章
- 2020届华为秋招数字芯片面试经验
- 程序员是怎样撩到一个女朋友的?
- 身份证号码中,年龄、性别的提取方法
- usb连接计算机充电,科技:通过USB-C为笔记本电脑充电:这是您需要知道的
- 三星s6 android 5.1.1,或开放特性 三星S6欲推安卓5.1.1
- vue中 process.env与process.VUE_CLI_SERVICE
- Robotium源码分析之Instrumentation进阶
- 《乐高EV3机器人搭建与编程》——1.5 主控器和电池
- 程序员入门有年龄限制吗?
- Win7设置AHCI模式启动