分布の説明とカテゴリ別に検索する機能を備えたオフラインrutrackerデータベース

最近、急流トラッカーのブロックについてのうわさ( または、うわさはまだありませんか? )rutracker.orgのパーサーを書くように促されました。 この記事では、スクリプトのオプション、出力について説明します。 また、カテゴリ別に検索する機能を備えたビューア、および2016年1月16日の説明を含むディストリビューションデータベースも含まれています。







なんで?



  1. スクリプトの作業を開始した時点では、rutrackerはまだベースをレイアウトしていませんでした。
  2. このデータベースには、分布の説明があります。
  3. 同様の記事が2013年にハブに掲載されましたが、残念ながら、このデータベースは公開後に更新されておらず、 リポジトリの最後の更新は2014年1月16日でした。
  4. これは私の最初の大きなpythonアプリケーションであり、タスクの並列化からWindows用のバイナリのコンパイルに至るまで、この言語の多くの興味深い機能を知ることができました。




スクリプトを実行してサイトをミラーリングする例



python3 ./ loader.py --ids 0000001 5160000 --threads 200 --qsize 25 --resume



パラメータの説明



オプション 説明
--ids 0000001 0001000 指定範囲内のポンプ分布
--ids_file file_with_ids.txt 指定されたファイルからダウンロードする配布番号を取得します
--ids_ignore old_finish.txt 指定されたファイルにない配布をダウンロードから除外します(たとえば、以前のダウンロード中になかった番号をスキップできます)
-ランダム ランダムな順序でディストリビューションをダウンロードする
-スレッド100 ダウンロードするスレッドの数
--proxy_file proxy.txt socks5プロキシを含むファイル(デフォルト-proxy.txt)
--login_file login.txt サイトへのログインを含むファイル(デフォルト-login.txt)
-再開 前のダウンロードを続行します(finished.txtファイルからの配布を無視します)
-印刷 再開オプションと一緒に、ダウンロードされた/ダウンロードされていないディストリビューションの数を表示し、プログラムを終了します
-フォルダーの説明 配布の説明が保存されるディレクトリの名前を示します(デフォルトはdescr)
--qsize 20 ダウンロードの最大キュー(デフォルトは30)


ヘルパーテキストファイルの説明



サイトへのログインを含むファイル形式



ユーザー名1パスワード1

ユーザー名2パスワード2



注:配布の変更日は、プロファイルに設定されているタイムゾーンによって異なります。



プロキシファイル形式



127.0.0.1 8080

127.0.0.1 8081



作業中



ダウンロード済みまたは存在しないディストリビューションの数は、finished.txtファイルに記録されます。 ログはコンソールおよびlog.txtファイルと並行して表示されます。 Cookieはtemp_cookies.txtに書き込まれ、セッション間で保存されます。



結果の説明



table.txtファイルには、分布に関する情報が格納されます(説明を除く)。 各分布について保存されます(区切り文字-\ t):



例:



4130425 Mark Lutz/ - Python, 4- [2011, PDF, RUS] 12799942 390 9 B507A45DA54ED5EED13221B16E2030DF789A235F 46455 28-08-12 11:28 | |









配布の説明は、配布番号の最初の3桁のサブディレクトリにあるdescrフォルダー(または--folderオプションで指定)の個別のファイルに保存されます。



たとえば、ディストリビューション04893221の説明はdescr \ 048 \ 04893221に保存されます。



スクリプトの作成時に発生した主な問題



  1. サイトの1つのログインと1つのIPアドレスの制限は、最終的に、最も簡単なソリューションは、1つのストリームでのみIPとログインを同時に使用することです。
  2. マルチプロセッシングモジュールはforkシステムコールを使用してスレッドを作成し、現在のプロセスをコピーします。 したがって、すべての構成が最初に読み込まれ、ダウンロードリストが作成された場合、プロセスは50 MBを超えるメモリを消費し、すべての子孫は同じように重くなります。 解決策は、最初にプロセスプールを作成してから、構成を読み取ることです。
  3. 異なるページでは、同じ配布情報をソースコードのわずかに異なる形式で表示できます。 解決策-エラーが発生した場合、スクリプトに追加オプションを手動で導入しました。
  4. 特に未検証のプロキシを使用している場合、ネットワークスタックを操作すると、あらゆる種類のエラーが大量に発生する可能性があります。 1つのプロキシから多数のエラーが発生した場合-ページがエラーで受信された場合、ブロックされます-再読み込みのためにキューの最後に追加されます。
  5. マルチプロセッサアプリケーションを作成する際のあらゆる種類のミス。 最も効果的なデバッグ方法は、すべてを記録し、さまざまな表示レベルですべてを記録することでした。
  6. ビューアーを作成する際の主な問題は、ディストリビューションの検索でした。 MySQLの全文検索は、単語の一部による検索を拒否しました(完全な偶然による一致のみ)。 完全検索が長すぎます。 現在の妥協-リストはシードの数でソートされ、指定された数の結果が見つかるまで検索が順番に実行されます。




視聴者



保存されたデータベースを表示し、ディストリビューションを検索するために、PyQt5を使用してビューアが作成されました。 動作するには、ファイルtable_sorted.tar.bz2が必要です。このファイルには、テキストファイルtable_sorted.txt(table.txt、シード数でソート)が含まれています。 変換には、 このスクリプトを使用できます。



また、(オプションで)スクリプトの横にdescrディレクトリを配置できます。このディレクトリには、配布のアーカイブされた説明があります。 このスクリプトを詰めました



ディレクトリとアーカイブ構造の例:



  descr / 000 / 00000.tar.bz2
         descr / 000 / 00001.tar.bz2
         ...
         descr / 000 / 00099.tar.bz2
         descr / 001 / 00100.tar.bz2
         descr / 001 / 00101.tar.bz2
         ...
         descr / 001 / 00199.tar.bz2
         ... 


ビューアーの外観はKDPVに表示されます。



検索オプション



  1. 単語の前のマイナス記号は、問題のある分布を除外します。
  2. limit:検索を停止した後の結果に制限を設定するには5(デフォルトは20)。
  3. 右側のフィールドに、カテゴリ名で検索する単語を入力できます。




ハッシュをダブルクリックすると、マグネットリンクがクリップボードにコピーされます。



必要条件



python3-pyqt5、python3-pyqt5.qtwebkit



設置



python3のスクリプト



Windows用のコンパイル済みバイナリ: Mega.nz (30 Mb)(必要なすべてのライブラリを含む)。



2016年1月16日現在



シードの数でソートされた分布に関する基本情報を含むファイル: Mega.nz (118 Mb)。



配布の説明(ビューアーでフォルダーに解凍): Mega.nz (2.06 GB)。



コードに対する批判は大歓迎です。



将来的には、視聴者にlibtorrentサポートを追加し、ディストリビューションのコンテンツを表示したり、プレーヤーにストリーミングしたりする機会を得るというアイデアがあります。



2014年6月(カテゴリなし)および2015年7月(カテゴリあり)から保存されたデータベースもあります。必要に応じて、これらのスライス間の変更に関する統計を計算できます。



スクリプトソースはgithubにアップロードされます。



All Articles