去哪兒網機票爬蟲


  最近公司有一個新的需求,就是需要爬某一天飛機票的數據,先讓我爬攜程,去哪兒網的數據,攜程的話,還是比較簡單的,但是在去哪兒網就遇到問題了,剛開始的時候我是用requests模塊來爬去哪兒網,在請求的頭信息,有一些隨機值,每次請求都不一樣,即使你使用上一次請求的隨機值,還是會給你返回假數據。我自己給它生成一些隨機字符串去請求,但依然返回假數據。最后沒有辦法,我只能使用selenium大法了。

      在使用selenium的過程中,去哪兒網還做了一些反selenum爬蟲:

  1. 用js識別了selenium

  當我把地點,時間都選好了,點擊加載,進入到各個航班信息頁面,其他部分都顯示了,核心數據,一直加載中,我電腦都死機了好幾次。

  這種反爬第一次遇到,只能百度了,最后在這位大神找到解決辦法,鏈接:https://www.cnblogs.com/xieqiankun/p/hide-webdriver.html

  解決:

  在option加參數, 試瀏覽器停止“開發者模式運行”;我使用的chrome瀏覽器,所以:

  option = webdriver.ChromeOptions()
 option.add_experimental_option('excludeSwitches', ['enable-automation'])

  然后數據就成功顯示出來,

    

  2. 在飛機票價格上,使用css,把價格打亂,讓你爬不到真正的價格

在我以為即將成功的時候,發現一個新的問題了,使用xpath匹配的數據,有很多打亂的數據,而且還有一些干擾數據在里面:

<em class="rel">
    <b style="width:48px;left:-48px">
        <i style=width: 16px;"">6</i>
        <i style=width: 16px;"">5</i>
        <i style=width: 16px;"">6</i>
    </b>
    <b style="width: 16px;left:-48px">7</b>
</em>

真正的價格:756

規則:

主要看css寬度

如上面:

  總寬度48px

  展示的值b標簽里面的i標簽的text值,除了一個b標簽是用來展示的,其他b標簽的值替換i標簽中text值即為真正的值。

  每個b標簽里面style中left值表示位置,如left:-48px, 替換第一個i, 如果left:-16px, 就替換第3個i。

  思路就是這樣的了,代碼我放到github上面的,鏈接:https://github.com/bobos008/Airticket

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM