乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      利用Python來(lái)獲取源源不斷的種子!想看啥類型的就獲取啥類型的!

       靜幻堂 2018-09-18
      程序員的聚集地 2018-09-17 20:37:37

      磁力鏈接

      現(xiàn)在我們使用迅雷等工具下載資源的時(shí)候,基本上都只需要一個(gè)叫做磁力鏈接的東西就可以了,非常方便。


      利用Python來(lái)獲取源源不斷的種子!想看啥類型的就獲取啥類型的!

      私信小編01 02 03 04 即可獲取數(shù)十套PDF哦!

      磁力鏈接是對(duì)等網(wǎng)絡(luò)中進(jìn)行信息檢索和下載文檔的電腦程序。和基于“位置”連接的統(tǒng)一資源定位符不同,磁力鏈接是基于元數(shù)據(jù)文件內(nèi)容,屬于統(tǒng)一資源名稱。也就是說(shuō),磁力鏈接不基于文檔的 IP 地址或定位符,而是在分布式數(shù)據(jù)庫(kù)中,通過(guò)散列函數(shù)值來(lái)識(shí)別、搜索來(lái)下載文檔。因?yàn)椴灰蕾囈粋€(gè)處于啟動(dòng)狀態(tài)的主機(jī)來(lái)下載文檔,所以特別適用沒(méi)有中心服務(wù)器的對(duì)等網(wǎng)絡(luò)。

      磁力鏈接格式類似于 :

      magnet:?xt=urn:btih:E7FC73D9E20697C6C440203F5884EF52F9E4BD28

      分解一下這個(gè)鏈接

      • magnet:協(xié)議名。
      • xt:exact topic 的縮寫(xiě),表示資源定位點(diǎn)。BTIH(BitTorrent Info Hash)表示哈希方法名,這里還可以使用 SHA1 和 MD5。這個(gè)值是文件的標(biāo)識(shí)符,是不可缺少的。

      一般來(lái)講,一個(gè)磁力鏈接只需要上面兩個(gè)參數(shù)即可找到唯一對(duì)應(yīng)的資源。也有其他的可選參數(shù)提供更加詳細(xì)的信息。

      • dn:display name 的縮寫(xiě),表示向用戶顯示的文件名。
      • tr:tracker 的縮寫(xiě),表示 tracker 服務(wù)器的地址。
      • kt: 關(guān)鍵字,更籠統(tǒng)的搜索,指定搜索關(guān)鍵字而不是特定文件。
      • mt:文件列表,鏈接到一個(gè)包含磁力鏈接的元文件 (MAGMA - MAGnet MAnifest)。

      種子/DHT

      通過(guò)磁力就可以獲取種子文件從而進(jìn)行下載,這跟直接使用種子下載時(shí)一個(gè)道理的,只是少了從磁力到種子文件的一個(gè)過(guò)程而已。


      利用Python來(lái)獲取源源不斷的種子!想看啥類型的就獲取啥類型的!


      BitTorrent 協(xié)議的種子文件可以保存一組文件的元數(shù)據(jù)。這種格式的文件被 BitTorrent 協(xié)議所定義。擴(kuò)展名一般為“.torrent”。BitTorrent 使用”分布式哈希表”(DHT)來(lái)為無(wú) tracker 的種子(torrents)存儲(chǔ) peer 之間的聯(lián)系信息。這樣每個(gè) peer 都成了 tracker。這個(gè)協(xié)議基于 Kademila 網(wǎng)絡(luò)并且在 UDP 上實(shí)現(xiàn)。

      DHT 由節(jié)點(diǎn)組成,它存儲(chǔ)了 peer 的位置。BitTorrent 客戶端包含一個(gè) DHT 節(jié)點(diǎn),這個(gè)節(jié)點(diǎn)用來(lái)聯(lián)系 DHT 中其他節(jié)點(diǎn),從而得到 peer 的位置,進(jìn)而通過(guò) BitTorrent 協(xié)議下載。

      • peer: 一個(gè) TCP 端口上監(jiān)聽(tīng)的客戶端/服務(wù)器,它實(shí)現(xiàn)了 BitTorrent 協(xié)議。
      • 節(jié)點(diǎn): 一個(gè) UDP 端口上監(jiān)聽(tīng)的客戶端/服務(wù)器,它實(shí)現(xiàn)了 DHT(分布式哈希表) 協(xié)議。 如果對(duì) DHT 協(xié)議感興趣的話一定要看下 DHT 協(xié)議 的具體內(nèi)容,這里有 中文翻譯版本。(想要徹底讀懂項(xiàng)目的話一定要先了解該協(xié)議,代碼都是基于該協(xié)議實(shí)現(xiàn)的)




      務(wù)實(shí)的實(shí)踐

      項(xiàng)目來(lái)源

      一般來(lái)講到 Python 爬取,大家的第一印象可能就是 requests/aiohttp,或者是 scrapy/pyspider 等爬蟲(chóng)框架?;旧隙际菑闹付ǖ?HTML 頁(yè)面爬取信息。我有一個(gè)項(xiàng)目 torrent-cli(github.com/chenjiandongx/torrent-cli) 就是一個(gè)從資源網(wǎng)站上爬取磁力信息的工具。



      然而我想自給自足獲取磁力種子,Google 了一番,發(fā)現(xiàn)大家基本上的代碼都是從 simDHT(github.com/fanpei91/simDHT)這個(gè)項(xiàng)目來(lái)的,首先這個(gè)項(xiàng)目很棒,但是有個(gè)問(wèn)題就是代碼實(shí)現(xiàn)細(xì)節(jié)基本沒(méi)有一行注釋且不兼容 Python3。而很多網(wǎng)上同類的代碼基本上也是對(duì)這個(gè)照搬....

      所以我知道我要開(kāi)始干活了


      利用Python來(lái)獲取源源不斷的種子!想看啥類型的就獲取啥類型的!


      經(jīng)過(guò)一波 happy coding 之后


      利用Python來(lái)獲取源源不斷的種子!想看啥類型的就獲取啥類型的!


      項(xiàng)目結(jié)構(gòu)

      核心代碼

      • crawler.py

      從 DHT 網(wǎng)絡(luò)中獲取磁力鏈接。主要是利用一些大型的服務(wù)器 tracker,冒充 DHT 節(jié)點(diǎn),使用 UDP 協(xié)議加入到 DHT 網(wǎng)絡(luò)中一波搜索以及和其他節(jié)點(diǎn)搞好關(guān)系,讓他們也分享我點(diǎn)資源。磁力數(shù)據(jù)存放在了 redis,利用 redis 的集合特性來(lái)去重。使用了多線程/多進(jìn)程,用于提高爬取效率。在我的本地機(jī)器(i7-7700HQ/16G 內(nèi)存/8M 網(wǎng)速)跑了一下,效果還不錯(cuò),4 小時(shí)爬了 100 萬(wàn)條磁力鏈接。

      $ redis
      -
      cli
      127.0
      .
      0.1
      :
      6379
      >
      scard magnets
      (
      integer
      )

      1137627

      然后代碼推送到我那臺(tái)性能強(qiáng)悍 1 核/2G 內(nèi)存/1M 網(wǎng)速阿里云服務(wù)器跑一下,哎....


      利用Python來(lái)獲取源源不斷的種子!想看啥類型的就獲取啥類型的!


      • magnettotorrent_aria2c.py 利用 aria2 將磁力鏈接轉(zhuǎn)換為種子文件。嘗試了一些其他的方式將磁力轉(zhuǎn)換為種子,但效果好像都不怎么理想。使用過(guò) libtorrent 的 Python 版本,不知道是我打開(kāi)方式不對(duì)還是它本來(lái)效率就不高,反正愣是一個(gè)種子都沒(méi)有轉(zhuǎn)換成功。

      最后兜兜轉(zhuǎn)轉(zhuǎn)用到了 aria2 發(fā)現(xiàn)效率還可以。這里利用多線程跑一個(gè)命令。所以要先把 aria2 安裝到你的 PATH 中,具體參考官網(wǎng)介紹。

      • parse_torrent.py 解析種子文件內(nèi)容,同樣也是利用了 bencoder 進(jìn)行解碼。有了種子我們當(dāng)然要看看到底是些什么資源了啦。你說(shuō)世界就是這么小,在我解析出來(lái)的幾百個(gè)種子文件中,居然有幾個(gè)都是來(lái)自那個(gè)以 2的10次方為標(biāo)志的社區(qū)。




      有圖有真相


      利用Python來(lái)獲取源源不斷的種子!想看啥類型的就獲取啥類型的!


      不過(guò)我還是希望大家銘記下面這 24 字箴言


      利用Python來(lái)獲取源源不斷的種子!想看啥類型的就獲取啥類型的!


      輔助代碼

      • database.py:封裝了關(guān)于 redis 的數(shù)據(jù)操作,主要是利用其集合數(shù)據(jù)結(jié)構(gòu)。
      • utils.py:一些工具函數(shù)

      如何使用

      獲取源碼及安裝依賴環(huán)境

      $ git clone https
      :
      //github.com/chenjiandongx/magnet-dht.git
      $ cd magnet
      -
      dht
      $ pip install
      -
      r requirements
      .
      txt
      # 確保已經(jīng)安裝好 redis,redis 的具體配置可以在 database.py 里面修改。

      運(yùn)行項(xiàng)目

      # 至于進(jìn)程數(shù)量可以在 crawler.py 進(jìn)行調(diào)整$ python manage.py -h
      usage
      :
      manage
      .
      py
      [-
      h
      ]

      [-
      s
      ]

      [-
      m
      ]

      [-
      p
      ]
      start manage
      .
      py
      with
      flag
      .
      optional arguments
      :

      -
      h
      ,

      --
      help show
      this
      help message
      and

      exit

      -
      s run start_server func
      .

      -
      m run magnet2torrent func

      -
      p run parse_torrent func

      深刻的感悟

      自我學(xué)編程以來(lái),我一直都是屬于興趣驅(qū)動(dòng)的,對(duì)某種技術(shù)感興趣的話就會(huì)花時(shí)間去研究去嘗試。想成為一個(gè)有趣的人,去做一些有趣的事,真心覺(jué)得能把腦海里的想法轉(zhuǎn)變?yōu)榇a實(shí)現(xiàn)是件很棒的事,即使可能這件事在別人看來(lái)并沒(méi)有什么了不起。技術(shù)發(fā)展變化總是那么快,不緊跟著可能不小心就掉隊(duì)了。所以希望每個(gè)真心熱愛(ài)編程的人都能不忘初心,永遠(yuǎn)保持對(duì)新技術(shù)的熱情,永遠(yuǎn)能從編碼中找到樂(lè)趣。

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多