zoukankan      html  css  js  c++  java
  • python 爬虫 亚航 指定日期间的航线

    前两天在BOSS上找爬虫工作,投了N份简历,很少有回复的,唯一能看到点希望的是一家旅游公司,BOSS上回复说:要求做一些航空公司的爬虫,做好之后把思路和一些数据发过去,再谈后续的面试问题。

    发过来两个爬虫项目,说如果面试通过,会根据所选的爬虫项目进行工资定级,我选了这个据说是难度更大一些的:airasia.com。

    花了两天时间,搞定了这个爬虫,按要求把采集到的一部分数据和爬虫思路发送过去,结果是无人回复,我觉得,这份面试的机会,也这样悄悄的,被别人拥有了吧~

    也可能是我的简历太水,做过的一些爬虫项目什么的,懒的往网上发,也不喜欢总结,结果找工作的时候没有可拿的出手的东西,年纪也快30了,两三年的爬虫工作经历又没有优势,拿什么和人家争。

    以后养成好习惯吧,把做过的东西整理好,作为以后个人的资历。

    # ----- 正题 -----

    目的:采集指定日期内的所有航班的信息

    语言:Python

    框架:Scrapy

    系统:Mac

    抓包:Charles

    反爬:动态代理、轮换请求头

    分析:想要得到航线的详细信息,随便找一个航线,Charles抓包,就能看到一个这个的地址:

    “https://k.airasia.com/shopprice/0/0/TPE/DPS/2019-03-06/1/0/0”

    里面包含有当天有几趟航班、航班时间、地点、机仓类型、是否转机、转哪趟等详实信息,所以我要拿的就是这个页面。


    现在的问题就是如何拿

    在浏览器->开发者->Headers界面中,copy curl就可以拿到所有需要的信息,使用requests或者scrapy的方法进行请求,看能不能成功请求到上面的信息?
    curl 'https://k.airasia.com/shopprice/0/0/TPE/DPS/2019-03-06/1/0/0' -H 'Accept: application/json, text/plain, */*' -H 'Referer: https://www.airasia.com/booking/select/zh/cn/TPE/DPS/2019-03-06/N/1/0/0/O/N/CNY/SC' -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36' -H 'X-Custom-Flag: 1' -H 'Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJBMXoyUWloUEtXSWdtYlJ3a0ExWXpHcjNobFZKN1hJMiIsImlhdCI6MTU0NDQzODIwOCwiZXhwIjoxNjA3NTk2NjA4LCJhdWQiOiJQV0EgRGV2Iiwic3ViIjoicHJhZGVlcGt1bWFyckBhaXJhc2lhLmNvbSJ9.QJPYvJvzx8IZFP6mYTAKwva7eQ_DVT_4JRwk75Uhhd8' --compressed
    有一些疑惑,这里的cookie清除掉之后,仍然可以访问,但Authorization这个值,我没有拿到,通过搜索,我找到了这个值的位置,在js文件main.***.js之中。

    而main后面跟随的那串字符是不固定的,前几天我做测试时一直没变,但今天写这篇文章时,就失效了,说明这不是一个永久链接,会随时变化,再查找这串字符,它在网站ngsw中,这样,最重要的一个信息,就能拿到了。
    还有referer的值,这是包括航班起落点、起飞时间的值
    https://www.airasia.com/booking/main.434aa9bdbcf8c08efda4.js
    https://www.airasia.com/booking/ngsw.json
    referer: https://www.airasia.com/booking/select/zh/cn/KUA/PVG/2019-02-25/N/1/0/0/O/N/CNY/SC

    信息已经可以拿到了,这是最终一步,继续反推,我们需要知道从哪里出发

    还是要用Charles抓到的包,或者在浏览器->开发者中进行分析,分析始发、降落点信息在哪。
    最终得到了两个网站
    https://sch.apiairasia.com/station/zh-cn/file.json
    https://sch.apiairasia.com/stationoperate/zh-cn/file.json
    以及这个:
    https://sch.apiairasia.com/destination/kua/file.json
    上面两个站都是航站列表,下面的,则是通过KUA编码航站楼可去往的地点。
    我不知道那两个列表中到底哪个才是可起飞的站点,不过多试总比错过强,我把请求得到的数据进行了一下对比,station这个要比stationperate的站点要多,那我就假设它是起飞站的列表了,
    通过for循环拼接destination的url地址就能得到所有可到达的起落点信息。
    再把航线拼接成搜索页的正确形式传递,就OK了。

    基本,思路就是上面的这些。
  • 相关阅读:
    How to create jar for Android Library Project
    Very large tabs in eclipse panes on Ubuntu
    64bit Ubuntu, Android AAPT, R.java
    Linux(Ubuntu)下如何安装JDK
    Configure xterm Fonts and Colors for Your Eyeball
    建立、配置和使用Activity——启动其他Activity并返回结果
    建立、配置和使用Activity——使用Bundle在Activity之间交换数据
    建立、配置和使用Activity——启动、关闭Activity
    建立、配置和使用Activity——Activity
    异步任务(AsyncTask)
  • 原文地址:https://www.cnblogs.com/hejianlong/p/10443681.html
Copyright © 2011-2022 走看看