背景需求
有不少朋友問永恆君攜程網站的酒店信息怎麼抓取,今天這篇文章來分享一下使用web scraper來快速實現抓取攜程酒店信息。
例如,在攜程官網搜索北京 密雲水庫的酒店信息,
可以搜索到非常多的酒店信息。需要注意的是,搜索出來顯示的總數量,經永恆君測試,這個數量不一定就是下面展示酒店數量。
我們需要爬取每個酒店的名稱、位置、評分、評價、點評數量、價格信息。
需求分析
通過仔細觀察,我們發現:
1、搜索頁面不會把所有的酒店信息全部顯示出來,需要用鼠標向下滾動頁面之後,纔會加載後續的酒店信息。
2、滾動了兩頁之後,就不會自動進行頁面的加載了。這個時候需要點擊頁面上的“搜索更多酒店”,網頁纔會進一步加載後續酒店的信息,直到“搜索更多酒店”這個按鈕消失。
3、當“搜索更多酒店”這個按鈕消失之後,所有的酒店信息才展示完全,即纔可以抓取到這所有的酒店信息。(故,酒店數量多的時候,需要的時間會比較長,需要耐心等待)
配置運行
通過上面的分析可以知道,要抓取攜程酒店的信息,整個過程需要:
1、向下滾動兩次加載頁面
(參考知識點:爬取向下滾動加載頁面)
2、然後再點擊多次“搜索更多酒店”按鈕
(參考知識點:點擊「更多」進行翻頁)
將兩個操作合併起來,就可以實現酒店信息的爬取了。具體的配置就不詳細介紹了,永恆君會將sitemap文件在文後分享。
整體的一個結構圖就是這樣:
爬取的過程演示:
爬取的結果如下:
自定義爬取修改
上面花了這麼多時間來進行分析和配置,當然不能只用一次,搜索其他關鍵詞一樣是可以使用的,只不過需要做一點點適當的修改。
假如這個時候,需要抓取另外一個地方的酒店信息,比如說青島流亭機場 600元以上的酒店信息,應該怎麼操作呢?
同樣的,在攜程官網搜索青島的酒店,然後選擇流亭機場 600元以上這些條件,
這時候你會發現,頁面的URL會隨着你選擇的條件發生變化,我們需要把這個URL複製下來,做如下的修改:
刪除掉:
&checkin=2020/12/27&checkout=2020/12/28
以及#ctm_ref=ctr_hp_sb_lst這兩部分內容。
例如:瀏覽器URL地址爲
https://hotels.ctrip.com/hotels/listPage?cityename=qingdao&city=7&checkin=2020/12/27&checkout=2020/12/28&optionId=7&optionType=City&crn=1&adult=1&children=0#ctm_ref=ctr_hp_sb_lst&highPrice=-1&barCurr=CNY&zone=4123&sort=9&lowPrice=600&priceQuickFilters=5
(加粗的位置需要刪除)
那麼修改後爲
https://hotels.ctrip.com/hotels/listPage?cityename=qingdao&city=7&optionId=7&optionType=City&crn=1&adult=1&children=0&highPrice=-1&barCurr=CNY&zone=4123&sort=9&lowPrice=600&priceQuickFilters=5
將修改後的地址複製到web scraper的起始URL當中,其他的不用做修改,然後運行即可。
爬取的結果如下:
通過這樣修改URL的方法,你可以想搜什麼,就抓取什麼了。
永恆君已準備了整個sitemap文件,如果你感興趣的話,聯繫我即可獲取(看主頁)。
你可能還會想看:
歡迎交流!