男孩回過神來,重新整理思路。
既然是失蹤案,那就換一個出發(fā)點,從失蹤抓起。
他打開新聞?wù)荆l(fā)現(xiàn)密密麻麻早已鋪滿了各種各樣失蹤的新聞和求助帖子。
「城西兩名高中生已經(jīng)失聯(lián)三天,最后一次出現(xiàn)是放學(xué)結(jié)伴去的游戲廳,家長已將周邊游戲廳搜遍,仍未現(xiàn)身?!?br/>
「城東女子趙某兩天前出門夜跑后再也沒回家,警方根據(jù)其男友提供的常用夜跑路線展開搜索,未見蹤跡?!?br/>
「19歲女孩夜間上出租車后失蹤,出租車的GPS信號也在案發(fā)當(dāng)晚離奇消失,目前仍在進(jìn)一步搜索中。」
「14歲的初中女孩小韓,四天前放學(xué)回家途中走丟?!?br/>
「錢唐市警方提示,最近城西和城南地區(qū)犯罪分子猖獗,夜間出行要結(jié)伴,注意安全。」
他皺著眉頭一篇一篇看著,突然露出興奮的笑,快速在白紙上畫出路徑圖。
忍住沖動的喜悅,首先打開爬蟲軟件,軟件圖標(biāo)雖然是個小蜘蛛,不過倒也沒那么令人心慌,不過是順藤摸瓜抓取信息的可愛小工具而已。
什么?會員到期了?
男孩露出不滿,一個月都得一百多元的會員費,不能就此放過,可是自己口袋里也就幾百塊零花錢了都是省吃儉用拼出來的,如果跟母親要錢買軟件總覺得很奇怪吧。
既然沒錢,那就自己做一個。男孩咬著牙用力點頭,舒展手指,躍躍欲試。
開源框架很多,短板在主機(jī)的配置和調(diào)試上,各種版本各種語言的爬蟲都有,冗余是最大的敵人,尤其是要裝在谷文承那個可憐巴巴的遠(yuǎn)程主機(jī),小水管的帶寬和小松鼠心臟一樣的配置。
他苦笑了一下,對更適合爬蟲的python自然是不熟悉的,他在開源網(wǎng)站上找到熟悉的php版,作者是一個印度孩子,不同的主機(jī)操作系統(tǒng),遠(yuǎn)程安裝的命令都不一樣,好在開源網(wǎng)站支持遠(yuǎn)程克隆,一瞬間部署完畢。
奇怪,硬是沒起作用?果然是系統(tǒng)不對,為了用Torch開發(fā)人工智障男孩已經(jīng)忍痛洗成烏班圖了,如今又要回到php可不又得換回CentOS才好么,男孩捶了自己胸口一下,將那些被同學(xué)稱為人工智障的詩篇一一備份存好,重裝主機(jī)。
20分鐘過去,爬蟲部署完畢,男孩測試了一個本地新聞?wù)?,路徑設(shè)置是比較困難的,不同網(wǎng)站的頁面結(jié)構(gòu)有所不同,有些標(biāo)題的Class屬性都是亂寫的,男孩一邊忍著怒氣一邊一個一個調(diào)整好,過了半個小時,三個新聞?wù)疽呀?jīng)爬取完畢,最近7天只要帶著失蹤兩字的新聞全都被抓下來。
趁熱打鐵,他又添加了十個本地新聞?wù)竞蛢蓚€本地論壇,兩三個網(wǎng)站的反爬蟲機(jī)制很厲害,不到一分鐘就被禁止訪問了,他苦笑了一聲聳了聳肩,無論如何已經(jīng)有上千條新聞進(jìn)來了。
新聞抓取,達(dá)成!男孩帶著明亮的眼眸笑著,帶著欣喜回望了身后熟睡的女孩們,又緊握拳頭再次振作。
接下來是提取工作,首先是去重,用distinct命令就可以。去重之后剩下700多條新聞和帖子,男孩倒吸一口涼氣。
短短幾天,全市竟然發(fā)生了700多起失蹤案!
提取工作最難的一部分是地點識別,男孩沒有字典,如果是有物流公司的數(shù)據(jù)就好了――思忖片刻,問題很快解決。
他打開無極公司的地圖網(wǎng)頁,找到API接口,用網(wǎng)頁提取的方式將錢唐市的所有街道小區(qū)名、路名、飯館名、橋名、河名全部提取下來,畢竟工作量不大,于是他連公共廁所也沒有放過。導(dǎo)入新的數(shù)據(jù)表后,自制的字典完成。
借著字典和熟悉的命令,幾十萬字的新聞在5分鐘化為700個零碎地名的文件,再次去重之后,只剩下500多個地名。
早知道剛剛順便把坐標(biāo)也提取下來了,男孩挑了挑漫不經(jīng)心的眉毛,喝了一口茶舒展身體,靠著椅背略微休息一會回到屏幕前,重新調(diào)用無極公司的API。
這才發(fā)現(xiàn)無極公司早就提供了數(shù)據(jù)地圖的功能,作為測試版本還是免費的,男孩露出欣喜的笑容,他重新下載好地名的數(shù)據(jù)包,再次敲擊好命令之后,500多個地名后面紛紛出現(xiàn)對應(yīng)的GPS坐標(biāo)。
從開始到現(xiàn)在一共過去了兩個小時,男孩望著屏幕上密密麻麻標(biāo)著紅點的地圖露出興奮的笑,如此短的時間內(nèi)取得如此進(jìn)展真是嘆為觀止!這是過去以往都沒有達(dá)到的推進(jìn)速度。
看著屏幕,谷文承喜悅的嘴巴逐漸大張,滿臉驚恐。
紅點分布一共呈現(xiàn)出多個大圓,大多分布在城南城西,離自己最近的圓,其圓心是自己家南側(cè)兩個街區(qū)的十字路口,半徑在兩公里左右,無論是學(xué)校、自己家都被覆蓋!
最后是數(shù)據(jù)擬合,不管怎么樣數(shù)據(jù)都是符合冪律分布的,男孩首先刪去除了其他地方的數(shù)據(jù),只剩下自己所在片區(qū)的一個圓,他將噪點中心都去掉,只剩下最外圍的點狀分布,拼成一個圓環(huán)的輪廓,圓形擬合可以使用最小二乘法,他還沒用過這樣的公式,文承皺起眉頭。
他快速搜索到最小二乘法的原理,花了十幾分鐘快速啃完,接著來到開源代碼網(wǎng)站,卻找不到php版本的,有的是C語言版本,他還不是很熟,不過原理是相通的,更何況直接應(yīng)用就可以,根本不需要二次開發(fā)。
他深吸一口氣,下載了matlab之后將數(shù)據(jù)重新導(dǎo)入,一個清脆的回車鍵,擬合結(jié)束!
文承看著屏幕上一個完美的圓形滿意地笑起來,揉了揉眼睛,將數(shù)據(jù)再次導(dǎo)入地圖。
地圖上的圓心名叫遠(yuǎn)拓大廈,
谷文承突然想起來,那是一個爛尾樓。
將結(jié)果保存后關(guān)了電腦,忍住將答案告訴熟睡女孩的沖動,文承來到房門外悄悄關(guān)了門,來到沙發(fā)上躺下。
他看了看手機(jī),已是凌晨五點,即便是一個小時,還是夠睡的。
興奮的情緒似乎是小鬼的舞蹈一樣糾纏在腦中,谷文承無論怎么努力閉上眼睛都沉不下心,他在手機(jī)上胡亂翻著,突然翻到了前陣子剛拍下的一個女孩的照片,一下子就平靜下來,他就那樣靜靜地靜靜地看著,心緒逐漸平穩(wěn),困意排山倒海般涌來。