
darc - ダークウェブクローラープロジェクト技術情報および/または保守情報については、 |docs|_ を参照してください。
.. |docs| replace:: 公式ドキュメント .. _docs: https://darc.jarryshaw.me
注記: バージョン 1.0.0 以降、プロジェクトの新機能は
この公開リポジトリでは開発されません。更新および新リリースには
バグ修正とセキュリティパッチのみが適用されます。
darc はダークウェブクローリングのための万能ツールとして設計されています。
requests を統合して、Cookie やヘッダーフィールドなどの HTTP リクエストおよび
レスポンス情報を収集します。また selenium をバンドルして、
完全にレンダリングされた Web ページとそのビューのスクリーンショットを
提供します。
.. image:: https://darc.jarryshaw.me/en/latest/_images/darc.jpeg
darc の一般的な処理の流れは以下のように説明できます:
ワーカー には 2 つの種類があります:
crawler -- darc.crawl.crawler を実行し、リンクの
最新のビューを提供して接続可能性をテストします
loader -- darc.crawl.loader を実行し、リンクの
詳細なビューを提供してより多くの視覚情報を提供します
crawler タイプの ワーカー の一般的な処理の流れは以下のように説明できます:
darc.process.process_crawler: requests リンクデータベース
(darc.db.load_requests 参照) から URL を取得し、そのような URL を
darc.crawl.crawler に渡します。
注意:
darc.const.FLAG_MP が True の場合、関数は
マルチプロセッシング サポート付きで呼び出されます。darc.const.FLAG_TH
が True の場合、関数は マルチスレッディング
サポート付きで呼び出されます。どちらでもない場合、関数はシングルスレッドで呼び出されます。
darc.crawl.crawler: darc.link.parse_link を使用して URL を解析し、
URL をクロールする必要があるかどうかを確認します
(darc.const.PROXY_WHITE_LIST、darc.const.PROXY_BLACK_LIST、
darc.const.LINK_WHITE_LIST および darc.const.LINK_BLACK_LIST 参照)。
必要がある場合、requests を使用して URL をクロールします。
URL がまったく新しいホストからのものである場合、darc はまず
そのホストの robots.txt とサイトマップの取得および保存を試み
(darc.proxy.null.save_robots および darc.proxy.null.save_sitemap 参照)、
その後サイトマップからリンクを抽出して将来のクロールのためにリンクデータベースに
保存します (darc.proxy.null.read_sitemap および darc.db.save_requests 参照)。
また、送信 API が提供されている場合、darc.submit.submit_new_host
が呼び出され、取得したばかりのドキュメントを送信します。
robots.txt が存在し、darc.const.FORCE が
False の場合、darc は URL をクロールすることが許可されているかどうかを確認します。
注意:
ルートパス (例: https://www.example.com/ の /) は
robots.txt を無視して常にクロールされます。
この時点で、darc は darc.sites からカスタマイズされたフック関数を
呼び出してクロールし、最終的なレスポンスオブジェクトを取得します。
darc は darc.save.save_headers を使用して
セッション Cookie とヘッダー情報を保存します。
注意:
requests.exceptions.InvalidSchema が発生した場合、リンクは
darc.proxy.null.save_invalid によって保存されます。
それ以上の処理は中止されます。
レスポンスドキュメントのコンテンツタイプが無視されない場合
(darc.const.MIME_WHITE_LIST および darc.const.MIME_BLACK_LIST 参照)、
darc.submit.submit_requests が呼び出され、取得したばかりの
ドキュメントを送信します。
レスポンスドキュメントが HTML (text/html および application/xhtml+xml) の場合、
darc.parse.extract_links が呼び出され、HTML ドキュメントから
すべての可能なリンクを抽出し、そのようなリンクをデータベースに
保存します (darc.db.save_requests 参照)。
また、レスポンスのステータスコードが 400 から 600 の間である場合、
URL はリンクデータベースに保存し直されます
(darc.db.save_requests 参照)。そうでない場合、URL は
次のステップに進むために selenium リンクデータベースに保存されます
(darc.db.save_selenium 参照)。
loader タイプの workers に対して、一般的なプロセスは次のように説明できます:
darc.process.process_loader: その間、darc は
selenium リンクデータベース(darc.db.load_selenium を参照)から URL を取得し、
それらの URL を darc.crawl.loader に渡します。
注意:
darc.const.FLAG_MP が True の場合、関数は
マルチプロセス サポート付きで呼び出されます。darc.const.FLAG_TH
が True の場合、関数は マルチスレッド
サポート付きで呼び出されます。どちらでもない場合、関数はシングルスレッドで呼び出されます。
darc.crawl.loader: darc.link.parse_link を使用して URL を解析し、
Google Chrome を備えた selenium を使用して URL の読み込みを開始します。
この時点で、darc は darc.sites からカスタマイズされたフック関数を呼び出して、
元の selenium.webdriver.chrome.webdriver.WebDriver オブジェクトを読み込み、返します。
成功した場合、レンダリングされたソース HTML ドキュメントが保存され、 フルページのスクリーンショットが撮影されて保存されます。
送信 API が提供されている場合、darc.submit.submit_selenium
が呼び出され、読み込んだばかりのドキュメントを送信します。
その後、darc.parse.extract_links が呼び出され、
HTML ドキュメントから可能なすべてのリンクを抽出し、それらの
リンクを requests データベースに保存します(darc.db.save_requests を参照)。
注意:
darc は 3.6 を含む、それ以上のすべての Python バージョンをサポートしています。
現在、Linux(Ubuntu 18.04)および macOS(Catalina)でのみ
サポートおよびテストされています。
3.8 未満の Python バージョンでインストールする場合、darc は
バックポート互換性のために |walrus|_ を使用して自身をコンパイルします。
.. |walrus| replace:: walrus
.. _walrus: https://github.com/pybpc/walrus
.. code-block:: shell
pip install python-darc
システムに Google Chrome および対応するバージョンの Chrome Driver がインストールされていることを確認してください。
バージョン 0.3.0 から、タスクキューのデータベースバックエンドとして
Redis_ を導入しました。
.. _Redis: https://redis.io
バージョン 0.6.0 から、Redis_ データベースに加えて、
タスクキューのデータベースバックエンドとしてリレーショナルデータベースストレージ
(例: MySQL、SQLite、PostgreSQL_ など)を導入しました。
これは、タスクキューが非常に大きくなると、メモリコストが過大になる可能性があるためです。
.. _MySQL: https://mysql.com/ .. _SQLite: https://www.sqlite.org/ .. _PostgreSQL: https://www.postgresql.org/
darc プロジェクトを使用する際は、いずれかのバックエンドデータベースが
インストールされ、設定され、実行されていることを確認してください。
ただし、darc プロジェクトは Docker および Compose のサポートとともに提供されています。
関連ファイルと詳細については、プロジェクトルートを参照してください。
または、Docker Hub_ リポジトリを参照および/またはそこからインストールすることもできます:
.. code-block:: shell
docker pull jsnbzh/darc[:TAGNAME]
.. _Docker Hub: https://hub.docker.com/r/jsnbzh/darc
または、より更新された包括的なイメージを備えた GitHub Container Registry から:
.. code-block:: shell
docker pull ghcr.io/jarryshaw/darc[:TAGNAME]
docker pull ghcr.io/jarryshaw/darc-debug[:TAGNAME]
darc プロジェクトはシンプルな CLI を提供します::
usage: darc [-h] [-v] -t {crawler,loader} [-f FILE] ...
the darkweb crawling swiss army knife
positional arguments: link links to craw
optional arguments: -h, --help show this help message and exit -v, --version show program's version number and exit -t {crawler,loader}, --type {crawler,loader} type of worker process -f FILE, --file FILE read links from file
モジュールのエントリポイントを通じて呼び出すこともできます::
python -m darc ...
注意:
リンクファイルには コメント 行を含めることができ、# で始まる必要があります。
空行とコメント行は読み込み時に無視されます。