大型爬蟲案例:爬取去哪兒網自由行資料(10萬條資料)

NGU發表於2018-08-05

世界那麼大,我想去看看。相信每到暑假期間,就會有很多人都想去旅遊。但是去哪裡玩,沒有攻略這又是個問題。這次作者給大家帶來的是爬取去哪網自由行資料。先來講解一下大概思路,我們去一個城市旅行必定有一個出發地,然後有一個目的地,再然後我們就會搜尋當地的名勝然後選擇一條路線。這個就是我們旅行開始之前的準備過程。沒有這些,我們的旅行就不能開始。所以這次這個案例的目的就是獲取去哪兒網上所有自由行的出發城市,然後獲取該出發城市能到達的城市,再獲得該目的城市所有的旅行產品。好了,是不是很簡單。有了大體的思路,再去實現一個原始碼就不是難事了。作者在這裡用的是Python來實現的,用的庫為request庫,將資料抓取下後再儲存到MongoDB資料庫。我們先看一下抓取後的結果。


控制檯輸出結果

大型爬蟲案例:爬取去哪兒網自由行資料(10萬條資料)

大型爬蟲案例:爬取去哪兒網自由行資料(10萬條資料)

儲存到MongoDB資料庫,目前資料庫有5萬多條自由行資料。

大型爬蟲案例:爬取去哪兒網自由行資料(10萬條資料)


1.訪問站點解析資料

此次我們訪問去哪兒站點的url為“http://touch.qunar.com/”這個網址是去哪兒的移動端,因為它返回的資料是JSON格式,JSON格式資料比較容易處理,所以我們以後資料採集的時候,可以優先選擇JSON資料。我們用瀏覽器訪問該URL,然後選擇自由行這一欄。如下圖所示。


大型爬蟲案例:爬取去哪兒網自由行資料(10萬條資料)


我們單擊左側的出發地站點,如下圖所示。大型爬蟲案例:爬取去哪兒網自由行資料(10萬條資料)


開啟開發者工具,選中XHR,我們可以從原始碼中看到全國各個出發地站點根據字母排序。如下圖所示。大型爬蟲案例:爬取去哪兒網自由行資料(10萬條資料)


然後切換到Headers頁面,觀察Request URL和Request Method。如下圖所示。

大型爬蟲案例:爬取去哪兒網自由行資料(10萬條資料)


此時的目標URL為"https://touch.dujia.qunar.com/depCities.qunar"。


我們再點選自由行的搜尋框,從這裡我們可以搜尋我們想去的城市。

大型爬蟲案例:爬取去哪兒網自由行資料(10萬條資料)

我們可以從開發者工具中Headers中看到一個請求連結,其中“dep”表示我們出發的城市,由於伺服器不能識別中文字元,所以“dep”後面是經某種編碼方式編譯後才提交給伺服器的。這也就是我們看到的一串文字,所以我們可以通過更改dep的值來選擇任意一個城市作為我們的出發地。

我們隨機選擇一個想去的城市,作者在這裡選擇的是麗江,開啟開發者工具。

大型爬蟲案例:爬取去哪兒網自由行資料(10萬條資料)

我們可以看到其中的請求連結為"https://touch.dujia.qunar.com/list?modules=list%2CbookingInfo%2CactivityDetail&dep=%E6%B7%B1%E5%9C%B3&query=%E4%B8%BD%E6%B1%9F%E8%87%AA%E7%94%B1%E8%A1%8C&dappDealTrace=false&mobFunction=%E6%89%A9%E5%B1%95%E8%87%AA%E7%94%B1%E8%A1%8C&cfrom=zyx&it=FreetripTouchin&date=&configDepNew=&needNoResult=true&originalquery=%E4%B8%BD%E6%B1%9F%E8%87%AA%E7%94%B1%E8%A1%8C&limit=0,28&includeAD=true&qsact=search"。

其中"dep="後面是出發城市,"query="後面是目的城市,"originalquery="後面是目的城市。從這個連結我們可以獲取到該自由行線路的所有產品,並且分析其JSON檔案就可以獲得自由行產品資訊。到此我們我們已經獲得了一條線路的所有產品了,那我們獲取所有城市之間的自由行產品就很容易了。因為之前我們已經拿到了所有出發城市和目的城市的列表了。到此所有的分析都已經完成,我們可以用程式碼來實現了。

大型爬蟲案例:爬取去哪兒網自由行資料(10萬條資料)


2.原始碼實現


大型爬蟲案例:爬取去哪兒網自由行資料(10萬條資料)

大型爬蟲案例:爬取去哪兒網自由行資料(10萬條資料)

大型爬蟲案例:爬取去哪兒網自由行資料(10萬條資料)

大型爬蟲案例:爬取去哪兒網自由行資料(10萬條資料)

大型爬蟲案例:爬取去哪兒網自由行資料(10萬條資料)

大型爬蟲案例:爬取去哪兒網自由行資料(10萬條資料)


3.結語


相信讀者看到這裡,已經瞭解了本篇爬蟲的思路了,因為去哪兒網伺服器後臺有較強的識別爬蟲的能力。程式碼中作者也給出了一些反反爬的策略。最簡單的方式就是犧牲爬取的速度。如果不想犧牲速度可以加上ip代理池和cookie池,隔一段時間就換下ip和當前cookie的值。有興趣的讀者和想挑戰下的讀者可以嘗試下。


本案例原始碼:

"https://github.com/NGUWQ/Python3Spider/blob/master/dataanalysis/qunar.py"


如果覺得好的話,可以在GitHub上給個Star。作者會在公眾號每天分享一些好玩的爬蟲和演算法原始碼。


對爬蟲,資料分析,演算法感興趣的朋友們,可以加微信公眾號 TWcoding,我們一起玩轉Python。


轉載請註明出處,謝謝!


自助者,天助之

大型爬蟲案例:爬取去哪兒網自由行資料(10萬條資料)




相關文章