如何去除网页噪声提取数据(01) —— 去哪儿网

本文介绍了如何使用selenium爬取去哪儿网的机票价格信息,详细解析了网页请求和数据混淆的处理过程,揭示了数据在渲染后的混淆策略,并展示了通过审查元素分析混淆方式,最后说明了如何通过代码实现数据提取。
摘要由CSDN通过智能技术生成

如何去除网页噪声提取数据(01) —— 去哪儿网

1. 需求介绍

  • 今天的目标是爬取 “去哪儿网” 上的数据信息,去哪儿网上的数据是非常珍贵的,所以这个数据被保护的也很严格,不仅仅是原始数据获取较为困难,而且渲染后的数据也加入了大量的混淆。
  • 尽管难度很大,但是作为一直修炼千年的蜘蛛精,是没有爬不下来的数据滴。
  • 下面就看我如何织网,如何捕获猎物……呃,不对,是爬取数据……

2. 环境

  • python 3.6.1
  • 系统:win7
  • IDE:pycharm
  • 安装过chrome浏览器
  • 配置好chromedriver(设置好环境变量)
  • selenium 3.7.0

3. 网站分析

3.1. 分析网页请求

  • 通过请求分析,可以看到网页本身的代码是很少的,数据基本上都来自于ajax请求。
    这里写图片描述
  • 我们再看看ajax返回的json数据:针对其中每条请求返回的json数据,都无法查找到价格的数据,说明信息隐藏的很深很深…
    这里写图片描述
  • 但是,不要灰心不要哭,我们还有最后的杀手锏,绝世好剑:selenium,此剑一出,毁天灭地。

3.2. 分析价格数据本身

  • 既然我们决定采用selenium来爬取数据,那就有必要分析一下渲染后数据的呈现形式了。
  • 第一:通过复制,我们发现这个价格数据是无法被复制的:网页显示3028,但是复制出来的数据是232803,说明数据是被混淆过的。
    这里写图片描述
  • 第二:通过审查元素,查看数据是如何经过混淆的:如下图所示,混淆的策略是,先在坐标点放上4个数字,然后用其他数字取代其中某两个坐标点上的数字,相当于覆盖(叠在上层,让底层的数字不可见),所以我们复制的时候是把所有的数字都复制下来了232803,但是用户看到的数字是3028
    这里写图片描述
  • 混淆过程如下:
    这里写图片描述
  • 通过上面的分析过程,发现对于一个4位数字的机票价格,第一步先用四个 i 标签渲染,再用两个 b 标签去绝对定位偏移量,覆盖故意展示错误的 i 标签,最后在视觉上形成正确的价格…我们知道衣服是怎么穿上去的,那么将这件外衣脱下来,自然是很简单的事情了

4. 代码实现


# 需要特别注意的是,在程序运行时,切记不要手动更改窗口大小
# 因为这样会修改到程序获得的标签的坐标信息,导致数据混乱!

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.w
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值