Java爬携程_Java数据爬取——爬取携程酒店数据(一)
最近工作要收集点酒店数据,就到携程上看了看,记录爬取过程去下
从网站地图上可以很容易发现这个页面
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数据爬取——爬取携程酒店数据(一)相关推荐
- java无极树形结构_Java爬虫框架:SeimiCrawler——结构化解析与数据存储
本文将介绍如何使用SeimiCrawler将页面中信息提取为结构化数据并存储到数据库中,这也是大家非常常见的使用场景.数据抓取将以抓取博客园的博客为例. 建立基本数据结构 为了演示,简单起见只建立一个 ...
- java调用第三方接口_java调用第三方接口,获取接口返回的数据。
java接收远程调用的数据,得到的是如上个数的返回内容,我怎么写才能获取到值,现在使用的请求方法如下: public static HttpResult postJsonData(String url ...
- java set集合元素_Java面试题10(如何取到set集合的第一个元素)
1.如何取到set集合的第一个元素. public static voidmain(String[] args) { Set set= newHashSet(); set.add("xixi ...
- java模拟登陆系统_Java模拟登录系统抓取内容【转载】
1 @Component2 public class Login extendsBaseJobs {3 4 SimpleDateFormat sdf = new SimpleDateFormat(&q ...
- java模拟银行存取_JAVA模拟银行存钱,取钱操作以及计算利息操作
/* *程序的版权和版本声明部分: *程序的版权和版本声明部分: *Copyright(c)2013,烟台大学计算机学院学生 *All rights reserved. *文件名称: *作者:尚振伟 ...
- java csv 导入数据库_java – 如何上传CSV文件然后自动将数据插入数据库?
我有基于 Java的Spring MVC应用程序,它也使用Spring安全性.我正在使用hibernate作为此Web应用程序的ORM工具. 以下是我的要求 – 用户可以使用Web浏览器上传CSV文件 ...
- java 辗转相除_Java实现辗转相除法并求取最大公约数、最小公倍数
算法介绍 辗转相除法, 又名欧几里德算法(Euclidean algorithm),是求最大公约数的一种方法. 它的具体做法是: 用较大数除以较小数,再用出现的余数(第一余数)去除除数, 再用出现的余 ...
- 携程网全国各城市酒店数据评论数据
数据说明: 携程网全国各城市酒店数据(含开业年份.装修年份.房间数.经纬度.评论数和评分.酒店全部图片.各房型的图片价格等等,详细见下面的字段说明部分),总计酒店基本信息735,476条,酒店图片98 ...
- Java数据爬取——爬取携程酒店数据(二)
在上篇文章Java数据爬取--爬取携程酒店数据(一)爬取所有地区后,继续根据地区数据爬取酒店数据 1.首先思考怎样根据地域获取地域酒店信息,那么我们看一下携程上是怎样获得的. 还是打开http://h ...
- Java数据爬取——爬取携程酒店数据(一)
最近工作要收集点酒店数据,就到携程上看了看,记录爬取过程去下 1.根据城市名称来分类酒店数据,所以先找了所有城市的名称 在这个网页上有http://hotels.ctrip.com/domestic- ...
最新文章
- Django配置开发环境和生产环境以及配置Jinja2模板引擎
- Spring自学教程-注解的使用(三)
- 列表是不是python数据类型的是_在Python中,一个列表中的数据类型是否可以不相同?(回答可以or不可以)...
- 实验5 —— 编写、调试具有多个段的程序
- kubernetes Deployment介绍
- PMP常考知识点整理
- Linux基础知识: SSH命令
- 中国程序员在德国:海外版抖音火爆,IT 人才稀缺!| 畅言
- 微信内置的浏览器如何上传文件
- 3.2【微信小程序全栈开发课程】登录功能(一)--实现登录功能
- 从零开始的纪中生活(7.11~7.22)
- flash打印纸张设置
- 【异常记录】C# 连接数据库错误异常解决 err:40
- pytest入门_测试用例分类_@pytest.mark.smoke
- ​建行数据从Teradata迁移到Greenplum大揭秘
- 2022-01-08
- 【java学习】jmeter与自动化测试
- Python随笔:用 json 进行 字符串和字典 数据类型的转换
- python中zip什么意思_浅谈Python中的zip()与*zip()函数详解 python的zip函数加上一个*号,是什么含义...
- Java的一个常见小错误