[保姆级,Java]一文教会你如何爬取携程网站的数据

前言

起初做这个是因为博主想要监控携程的酒店和机票价格,途中踩了许多坑故作此记录

机票接口分析:

在这里插入图片描述

  • 航班信息的详细数据全部来源于 jxxxxxxx-xxxxx 这个请求
  • 这个 id 号是通过 batchSearch 请求的响应数据中获取的
  • 且请求头中需要携带 Transactionalid

酒店接口分析

在这里插入图片描述

  • 酒店的数据主要来自于 HotelSearch 和 hotelSearchNearby 这两个接口
  • 酒店页面搜索的界面需要登录

从上面的分析来看不管是单纯的爬取 html 页面还是请求接口都是不现实的
因此我使用的技术栈如下 :

  • Selenium
  • BrowserMob-proxy
  • firefox driver

引入依赖

这里关于 Selenium 和 BrowserMob 的版本关系有很大的坑,高于 4.0 的 Selenium-Java 库修改了一些方法的参数类型,且会与现有的 guava 库产生冲突,如果你尝试覆盖掉 guava 库以与当前的 Selenium-Java 库匹配,会导致其他依赖 guava 库的第三方库出错无法启动 springboot 项目

<dependency>
	<groupId>org.seleniumhq.selenium</groupId>
	<artifactId>selenium-java</artifactId>
	<version>3.141.5</version>
</dependency>
<dependency>
	<groupId>net.lightbody.bmp</groupId>
	<artifactId>browsermob-core</artifactId>
	<version>2.1.5</version>
</dependency>

核心代码

这里给出的是使用 firefox 版本的代码,原因是携程的机票响应可能数据过大导致 chrome 浏览器无法加载出响应数据,目前只有火狐浏览器支持解除缓存大小限制,关于如何解除会在后面的排错给出

前置条件

  1. 安装 firefox 浏览器
  2. 下载 firefox 的 driver 文件,下载地址
  3. 把 webDriver 改为驱动文件的绝对路径
  4. 把 profile 改为 firefox 的用户目录 (先在网站登录成功过一次后在进行此项,目的是导入当前浏览器的登录信息)
    1. windows: C:\Users\your-username\AppData\Roaming\Mozilla\Firefox\Profiles\your-id
    2. linux:/root/.mozilla/firefox/your-id,(root 是我的根目录)

获取响应数据

public String getResponseData(String searchUrl, String regex, String waitFor) {
   
        // 设置 BrowserMob Proxy 路径和启动代理服务
        BrowserMobProxy proxy = new BrowserMobProxyServer();
        proxy.start
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值