城市公交、地鐵數據反映了城市的公共交通,研究該數據可以挖掘城市的交通結構、路網規劃、公交選址等。但是,這類數據往往掌握在特定部門中,很難獲取?;ヂ摼W地圖上有大量的信息,包含公交、地鐵等數據,解析其數據反饋方式,可以通過Python爬蟲采集。閑言少敘,接下來將詳細介紹如何使用Python爬蟲爬取城市公交、地鐵站點和數據。
首先,爬取研究城市的所有公交和地鐵線路名稱,即XX路,地鐵X號線??梢酝ㄟ^圖吧公交、公交網、8684、本地寶等網站獲取,該類網站提供了按數字和字母劃分類別的公交線路名稱。Python寫個簡單的爬蟲就能采集,可參看WenWu_Both的文章,博主詳細介紹了如何利用python爬取8684上某城市所有的公交站點數據。該博主采集了站點詳細的信息,包括,但是缺少了公交站點的坐標、公交線路坐標數據。這就讓人抓狂了,沒有空間坐標怎么落圖,怎么分析,所以,本文重點介紹的是站點坐標、線路的獲取。

以圖吧公交為例,點擊某一公交后,出現該路公交的詳細站點信息和地圖信息。博主頓感興奮,覺得馬上就要成功了,各種抓包,發現并不能解析。可能博主技術所限,如有大神能從中抓到站點和線路的坐標信息,請不寧賜教。這TM就讓人絕望了啊,到嘴的肥肉吃不了。

天無絕人之路,嘗試找找某地圖的API,發現可以調用,通過解析,能夠找到該數據的后臺地址。熟悉前端的可以試試,博主前端也就只會個hello world,不獻丑了。這是一種思路,實踐證明是可以的。

地圖API可以,那么通過地圖抓包呢?打開某圖主頁,直接輸入某市公交名稱,通過抓包,成功找到站點和線路信息。具體抓包信息如下圖所示,busline_list中詳細列出了站點和線路的信息,其中有兩條,是同一趟公交不同方向的數據,略有差別,需注意。找到入口過后,接下來爬蟲就要大顯身手了。

主要爬取代碼如下,其實也很簡單,主函數如下。首先需要構建傳入的參數,主要的包括路線名稱,城市編碼,地理范圍,縮放尺度。地理范圍可以通過坐標拾取器獲取,參數經url編碼后,發送請求,判斷返回數據是否符合要求(注:可能該線路地圖上停運或不存在,也可能是訪問速度過快,反爬蟲機制需要人工驗證,博主爬取的時候碰到過,所以后面設置了隨機休眠)。接下來,就是解析json數據了。代碼中的extratStations和extractLine,就是提取需要的字段,怎么樣,是不是很簡單。最后,就是保存了,站點和路線分別存儲。
新聞熱點
疑難解答