基于 DHT 網(wǎng)絡(luò)的磁力鏈接和BT種子的搜索引擎架構(gòu)

上周開發(fā)了一個磁力鏈接和 BT 種子的搜索引擎 {Magnet & Torrent}盼理,本文簡單介紹一下主要的系統(tǒng)功能和用到的技術(shù)符喝。

系統(tǒng)包括幾個獨立的部分:

  • 使用 Python 的 Scrapy 框架開發(fā)的網(wǎng)絡(luò)爬蟲,用來爬取磁力鏈接和種子嘲驾;

  • 使用 PHP CI 框架開發(fā)的簡易網(wǎng)站;

  • 搜索引擎目前直接使用的 MySQL,將來可以考慮使用 sphinx畅卓;

  • 中文分詞。

    用 PHP 寫了一個簡陋版的基于逆向最大匹配算法的小類蟋恬,詞庫呢翁潘,哈哈,直接使用了 Chrome 的分詞表歼争,分詞表可以在這個地址下載:http://www.mdbg.net/chindict/chindict.php?page=cedict拜马。

  • 新詞發(fā)現(xiàn)機制

    基于搜索關(guān)鍵詞的新詞發(fā)現(xiàn)機制。

    目前詞庫方面還有一個很大的問題沐绒,比如最新的電影無法分詞俩莽,例如星際穿越 會被分詞為“星際”和“穿越”,因此“被偷走的那五年乔遮,穿越火線扮超,極速蝸牛,了不起的蓋茨比蹋肮,摩登年代出刷,星際迷航,喬布斯傳坯辩∧俟辏”也出現(xiàn)在了搜索結(jié)果中。

    當(dāng)然這也不算事大問題漆魔,但是霍比特人卻被分詞為了“霍”坷檩、“比特”却音、“人”了,好在搜索結(jié)果里面沒有啥東西亂入矢炼。這些屬于過度分詞僧家,通過增加詞庫內(nèi)容可以解決,因此準(zhǔn)備些一個豆瓣爬蟲裸删,將豆瓣的所有電影都加入詞庫八拱,用來輔助分詞。

  • 資源別名

    這會使我們的系統(tǒng)更加智能涯塔,更加人性化肌稻。我們在百度搜索時,經(jīng)常會遇到這樣的情況匕荸,當(dāng)我們搜索“開核桃利器”爹谭,百度提示我們“您要找的是不是諾基亞?”榛搔。當(dāng)我們搜索“世界上最好的語言”诺凡,百度提示我們“您要找的是不是PHP?”践惑。同樣腹泌,當(dāng)用戶搜索“星際穿越”時,應(yīng)該為用戶提供Interstellar的匹配結(jié)果尔觉。

    我們不用實現(xiàn)復(fù)雜的在線翻譯凉袱,只需要繼續(xù)爬取豆瓣,將電影的中英文都做成對照表就可以了侦铜。而且专甩,為了考慮到某些宅男的特殊需求,我們還需要做一個日語的對照表钉稍。

  • 英文分詞

    英文還需要分詞涤躲?空格不就是詞語邊界嗎?你有這樣的譯文很正常贡未,我最初也是這么想的种樱,因此英文只是簡單的使用了 PHP 的 explode(' ', $query) 函數(shù)。

    但是我剛才(2015-02-01 21:59:35)看搜索日志時發(fā)現(xiàn)了一些問題羞秤,今天 xart 關(guān)鍵詞被搜索了 169 次缸托,而 x-art 關(guān)鍵詞僅僅被搜索了 54 次,但是 x-art 才是它的官方名詞榜啊(不要問我為什么知道的這么多)俐镐。因此我剛剛調(diào)整了一下代碼,將 xart 和 x-art 統(tǒng)一定向到了 x-art哺哼。

  • BitTorrent 低版本最初使用 Python 開發(fā)佩抹,而且是開源的叼风,因此很多類庫都是直接使用的 BitTorrent 的,也有一些類庫和輔助函數(shù)直接移植到了 PHP 平臺上棍苹;(Petru Paler 寫的 bencode 太贊了无宿,老婆問我:你為什么跪著寫代碼?)

了解 P2P 原理的人都知道枢里,BT 不需要中心服務(wù)器孽鸡,因為每個節(jié)點既是客戶端,同時也是服務(wù)器栏豺,因此基于 0x0d 大神的 dhtfck 寫了一個 DHT 爬蟲彬碱,它偽裝為 DHT 網(wǎng)絡(luò)中的一個節(jié)點,這樣當(dāng)其他客戶端想下載某個 torrent 時奥洼,就會在 DHT 網(wǎng)絡(luò)發(fā)起廣播巷疼,當(dāng)它詢問到我的節(jié)點時,我就知道了:哦灵奖,原來有人要下載這個種子啊嚼沿,那么在 DHT 網(wǎng)絡(luò)中肯定有這個種子。于是我把這個種子的信息保存到 MySQL 中瓷患。

以上 DHT 的整個過程可以具體看看 DHT 協(xié)議骡尽。

注意:我只是保存了 torrent 的 infohash 信息,用這個信息尉尾,可以構(gòu)建一個磁力鏈接爆阶,但是卻還沒有得到種子文件燥透,我們還得通過其它方式取得種子文件沙咏。

Python 的爬蟲程序是主動出擊,盲目尋找班套。在互聯(lián)網(wǎng)的海量網(wǎng)頁中尋找種子和磁力鏈接肢藐。而 DHT 爬蟲則變成了被動等待,當(dāng)別人來詢問時吱韭,就把它的詢問結(jié)果記錄下來吆豹,如果一個種子被詢問了很多次,則說明這個種子是一個熱門種子理盆,這是 Python 爬蟲無法做到的痘煤。

由于 BitTorrent 開源版本使用的 Python,因此我的 DHT 爬蟲也使用了 Python猿规。作為一個服務(wù)器衷快,肯定要使用 twisted 框架,熟悉 nodejs 的同學(xué)一定知道這個框架的特性:異步網(wǎng)絡(luò) IO姨俩,雖然大部分開發(fā)者都是通過 nodejs 才了解了異步 IO蘸拔,但是 twisted 要比 nodejs 早了 N 年师郑。

當(dāng)前運行的爬蟲是一個非常簡陋的版本,是我一周前寫的一個多線程的基于 Socket 的 DHT 服務(wù)器调窍。截至到寫這篇文章時宝冕,已經(jīng)運行了 6 天了,總共收集到了 45,234,859 個磁力鏈接邓萨。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末地梨,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子缔恳,更是在濱河造成了極大的恐慌湿刽,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件褐耳,死亡現(xiàn)場離奇詭異诈闺,居然都是意外死亡,警方通過查閱死者的電腦和手機铃芦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進(jìn)店門雅镊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人刃滓,你說我怎么就攤上這事仁烹。” “怎么了咧虎?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵卓缰,是天一觀的道長。 經(jīng)常有香客問我砰诵,道長征唬,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任茁彭,我火速辦了婚禮总寒,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘理肺。我一直安慰自己摄闸,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布妹萨。 她就那樣靜靜地躺著年枕,像睡著了一般。 火紅的嫁衣襯著肌膚如雪乎完。 梳的紋絲不亂的頭發(fā)上熏兄,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天,我揣著相機與錄音,去河邊找鬼霍弹。 笑死毫别,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的典格。 我是一名探鬼主播岛宦,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼耍缴!你這毒婦竟也來了砾肺?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤防嗡,失蹤者是張志新(化名)和其女友劉穎变汪,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蚁趁,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡裙盾,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了他嫡。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片番官。...
    茶點故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖钢属,靈堂內(nèi)的尸體忽然破棺而出徘熔,到底是詐尸還是另有隱情,我是刑警寧澤淆党,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布酷师,位于F島的核電站,受9級特大地震影響染乌,放射性物質(zhì)發(fā)生泄漏山孔。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一慕匠、第九天 我趴在偏房一處隱蔽的房頂上張望饱须。 院中可真熱鬧,春花似錦台谊、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至减宣,卻和暖如春盐须,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背漆腌。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工贼邓, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留阶冈,地道東北人。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓塑径,卻偏偏與公主長得像女坑,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子统舀,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,472評論 2 348

推薦閱讀更多精彩內(nèi)容