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了。

    基本,思路就是上面的这些。
  • 相关阅读:
    WINDOWS 远程桌面不能直接拷贝文件问题
    Spring的xml文件详解
    xml名称空间详解
    markdown基本语法
    web.xml文件详解
    Spring事务的7中传播行为
    docker修改容器配置文件
    Load balancer does not have available server for client: CLOUD-PROVIDER-HYSTRIX-PAYMENT
    layui导出表格的两种方法
    解决:Error:java: 无效的源发行版: 12
  • 原文地址:https://www.cnblogs.com/hejianlong/p/10443681.html
Copyright © 2011-2022 走看看