私は実験を行っており、最小限の Web クローラーを作成しようとしています。プロセス全体を非常に高いレベルで理解しています。では、次の詳細なレイヤーに入ると、プログラムはどのようにさまざまな Web サイトに「接続」して HTML を抽出するのでしょうか?
ソケットを使用してサーバーに接続し、http 要求を送信していますか? telnet または ssh を実行するコマンドを端末に与えていますか?
また、C++ は Web クローラーに適した言語ですか?
ありがとう!
私は実験を行っており、最小限の Web クローラーを作成しようとしています。プロセス全体を非常に高いレベルで理解しています。では、次の詳細なレイヤーに入ると、プログラムはどのようにさまざまな Web サイトに「接続」して HTML を抽出するのでしょうか?
ソケットを使用してサーバーに接続し、http 要求を送信していますか? telnet または ssh を実行するコマンドを端末に与えていますか?
また、C++ は Web クローラーに適した言語ですか?
ありがとう!
また、C++ は Web クローラーに適した言語ですか?
依存します。あなたは C++ がどれくらい得意ですか。
C++ は、その速度 (HTML ページを処理するために必要) のため、高度な高速クローラーを作成するのに適した言語です。ただし、クローラーを作成するのに最も簡単な言語ではないため、実験している場合はおそらく適切な選択ではありません。
あなたの質問によると、あなたは高度なクローラーを作成した経験がないため、おそらく単純なシリアル クローラーを作成しようとしています。ボトルネックは Web 全体でのページのダウンロード (ページの処理ではない) であるため、この速度は優先事項ではありません。だから私は別の言語を選びます(おそらくpython)。
C++ に固執する場合は、ソケットを使用して HTTP プロトコルをゼロから実装するのではなく、 libcurlライブラリの使用を検討する必要があります。そのライブラリで使用できるC++ バインディングがあります。
カールのウェブページから:
libcurl は無料で使いやすいクライアント側 URL 転送ライブラリで、DICT、FILE、FTP、FTPS、Gopher、HTTP、HTTPS、IMAP、IMAPS、LDAP、LDAPS、POP3、POP3S、RTMP、RTSP、SCP をサポートしています。 SFTP、SMTP、SMTPS、Telnet、および TFTP。libcurl は、SSL 証明書、HTTP POST、HTTP PUT、FTP アップロード、HTTP フォーム ベースのアップロード、プロキシ、Cookie、ユーザー + パスワード認証 (Basic、Digest、NTLM、Negotiate、Kerberos)、ファイル転送再開、HTTP プロキシ トンネリングなどをサポートしています!
libcurl は移植性が高く、Solaris、NetBSD、FreeBSD、OpenBSD、Darwin、HPUX、IRIX、AIX、Tru64、Linux、UnixWare、HURD、Windows、Amiga、OS/2、BeOs、Mac など、多数のプラットフォームで同じようにビルドおよび動作します。 OS X、Ultrix、QNX、OpenVMS、RISC OS、Novell NetWare、DOS など...
libcurl は無料で、スレッドセーフで、IPv6 と互換性があり、機能が豊富で、サポートが充実しており、高速で、完全に文書化されており、すでに多くの有名な大企業や成功している企業や多数のアプリケーションで使用されています。
短い答え、いいえ。私は C++ でのコーディングを好みますが、この例では Java アプリケーションが必要です。API には、多くの html パーサーに加えて、ソケット プロトコルが組み込まれています。このプロジェクトは、C++ では苦労します。私はJavaで一度コーディングしましたが、それはやや至福でした。
ところで、そこには多くのWebクローラーがありますが、カスタムニーズがあると思います:-)