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

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

2.然后查看源码

发现所有需要的数据都在

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爬携程_Java数据爬取——爬取携程酒店数据(一)相关推荐

  1. java无极树形结构_Java爬虫框架:SeimiCrawler——结构化解析与数据存储

    本文将介绍如何使用SeimiCrawler将页面中信息提取为结构化数据并存储到数据库中,这也是大家非常常见的使用场景.数据抓取将以抓取博客园的博客为例. 建立基本数据结构 为了演示,简单起见只建立一个 ...

  2. java调用第三方接口_java调用第三方接口,获取接口返回的数据。

    java接收远程调用的数据,得到的是如上个数的返回内容,我怎么写才能获取到值,现在使用的请求方法如下: public static HttpResult postJsonData(String url ...

  3. java set集合元素_Java面试题10(如何取到set集合的第一个元素)

    1.如何取到set集合的第一个元素. public static voidmain(String[] args) { Set set= newHashSet(); set.add("xixi ...

  4. java模拟登陆系统_Java模拟登录系统抓取内容【转载】

    1 @Component2 public class Login extendsBaseJobs {3 4 SimpleDateFormat sdf = new SimpleDateFormat(&q ...

  5. java模拟银行存取_JAVA模拟银行存钱,取钱操作以及计算利息操作

    /* *程序的版权和版本声明部分: *程序的版权和版本声明部分: *Copyright(c)2013,烟台大学计算机学院学生 *All rights reserved. *文件名称: *作者:尚振伟 ...

  6. java csv 导入数据库_java – 如何上传CSV文件然后自动将数据插入数据库?

    我有基于 Java的Spring MVC应用程序,它也使用Spring安全性.我正在使用hibernate作为此Web应用程序的ORM工具. 以下是我的要求 – 用户可以使用Web浏览器上传CSV文件 ...

  7. java 辗转相除_Java实现辗转相除法并求取最大公约数、最小公倍数

    算法介绍 辗转相除法, 又名欧几里德算法(Euclidean algorithm),是求最大公约数的一种方法. 它的具体做法是: 用较大数除以较小数,再用出现的余数(第一余数)去除除数, 再用出现的余 ...

  8. ​携程网全国各城市酒店数据​评论数据

    数据说明: 携程网全国各城市酒店数据(含开业年份.装修年份.房间数.经纬度.评论数和评分.酒店全部图片.各房型的图片价格等等,详细见下面的字段说明部分),总计酒店基本信息735,476条,酒店图片98 ...

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

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

  10. Java数据爬取——爬取携程酒店数据(一)

    最近工作要收集点酒店数据,就到携程上看了看,记录爬取过程去下 1.根据城市名称来分类酒店数据,所以先找了所有城市的名称 在这个网页上有http://hotels.ctrip.com/domestic- ...

最新文章

  1. Django配置开发环境和生产环境以及配置Jinja2模板引擎
  2. Spring自学教程-注解的使用(三)
  3. 列表是不是python数据类型的是_在Python中,一个列表中的数据类型是否可以不相同?(回答可以or不可以)...
  4. 实验5 —— 编写、调试具有多个段的程序
  5. kubernetes Deployment介绍
  6. PMP常考知识点整理
  7. Linux基础知识: SSH命令
  8. 中国程序员在德国:海外版抖音火爆,IT 人才稀缺!| 畅言
  9. 微信内置的浏览器如何上传文件
  10. 3.2【微信小程序全栈开发课程】登录功能(一)--实现登录功能
  11. 从零开始的纪中生活(7.11~7.22)
  12. flash打印纸张设置
  13. 【异常记录】C# 连接数据库错误异常解决 err:40
  14. pytest入门_测试用例分类_@pytest.mark.smoke
  15. ​建行数据从Teradata迁移到Greenplum大揭秘
  16. 2022-01-08
  17. 【java学习】jmeter与自动化测试
  18. Python随笔:用 json 进行 字符串和字典 数据类型的转换
  19. python中zip什么意思_浅谈Python中的zip()与*zip()函数详解 python的zip函数加上一个*号,是什么含义...
  20. Java的一个常见小错误

热门文章

  1. 释放linux缓存 echo 1 > /proc/sys/vm/drop_caches
  2. 傻,是不值得同情和原谅的事情
  3. 论傻瓜交换机接到有vlan的网管交换机为什么可以通信
  4. 关于你看得懂看不懂的罗永浩
  5. 引导工业物联网变革 中国占据有利位置
  6. html 宽度单位,长度单位有哪些?
  7. Solaris 设备状态检查常用命令
  8. UCSD ECE225A Syllabus
  9. SATA硬盘在安装OS时注意AHCI模式
  10. 【单片机仿真】(五)寻址方式 — 立即寻址与寄存器间接寻址