0x00
ウェブクローラー(ウェブスパイダー、ウェブボットとも呼ばれ、FOAFコミュニティでは一般的にウェブチェイサーと呼ばれる)は、特定のルールに従ってワールドワイドウェブに関する情報を自動的にスクレイピングするプログラムやスクリプトです。 他にあまり使われない名称には、アリ、オートインデックス、シミュレーター、ミミズなどがあります。
0x01
簡単に言えば、クローラーは独自のルールに従ってデータを取得し、それを分析して自分たちの有用なデータを取得します。
0x02
ウェブクローラーの最適化は、2つの段階に分けられます:
1: データのスクレイピング時の最適化;
2: 把握結果の処理を最適化すること;
今日はスクレイピングプロセスの最適化について話します!
0x03
クロールプロセスの最適化についていくつか要約しました:
1:物理的なアドレスで最適化できます。例えば、ターゲットリソースサーバーは上海のTencent Cloudホストです。同じ地域、つまり上海地域のサーバーを選択しようとします。北京や青島、その他の地域のサーバーは選ばず、同じIDCコンピュータルーム内のサーバーも選びましょう。このリソースサイトがTencent Cloudのサーバーであることは分かっていますが、クローラーはTencent Cloudのサーバー上に置くようにしていますが、Alibaba Cloudのサーバーには置かないようにしています!
2: 安定して高速なネットワークを選ぶ。一般的にクローラーはネットワーク品質に高い要求がある。家庭用ネットワークは使わないようにし、会社のネットワークを選ぶか、データをキャプチャするサーバーを購入する。
3: より効率的なクローラー言語を選ぶ。Pythonの方がクローラーに優れていると聞きましたが、使ったことがなく、後でテストします。今日は主に.net言語で説明します。
0x04
急ぎの購入のような場合、取得速度の要件は高く、時間の問題と説明できます。データを早期に取得し、取得の可能性を高めることです。以下はコンソールでデモを書きました。このウェブサイトのデータ取得テストを下の図に示しています。
(時間が短いほど速い)
上記のデータランキング:1: ネイティブ最適化されたコード、2: ネイティブコード、3: サードパーティプラグインDLL(パッケージ)
0x05
なぜサードパーティのプラグイン(パッケージ)は一番時間がかかるのでしょうか? サードパーティのプラグインは実際には多数のネイティブコードのカプセル化、多数の論理判断、そして比較的多用途であるため、クロール速度が遅くなることがあります。
こちらがネイティブコードです:
ネイティブコードはそのすぐ上の数行に載っています。平均時間は依然として184ミリ秒です。コードが単純であればあるほど、最適化は難しくなります上記のコードを平均99ミリ秒の時間に最適化するにはどうすればよいと思いますか?速度差が倍増した!
0x06
ターゲットリソースサーバーがgzip圧縮をサポートしている場合、ウェブサイトにアクセスしブラウザがリクエストした際、リクエストヘッダーには以下のパラメータが設定されます。
レスポンスヘッダーパラメータ:
「受理符号化」の導入:https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept-Encoding
平たく言えば:
クライアントはこう述べています:「gzip、deflate、sdch、br」圧縮アルゴリズムをサポートしており、データリターン時に好きなものを使っています。
サーバーはこう言いました:私はgzip圧縮アルゴリズムをサポートしているので、そのアルゴリズムを使ってデータを圧縮します
クライアントはこう述べています:では、受信したデータをgzipアルゴリズムで復号します
gzipアルゴリズムは、送信データを圧縮し、送信内容を大幅に削減できるため、リクエスト効率が向上するため、最適化されたコードは以下の通りです:
小さな細かい点ですが、効率は倍増したと言っても過言ではありません! これは2日間で集めたデータに相当し、今では1日で収集できるようになり、この記事はハイハイを学ぶ友人たちに捧げられています。
注:gzip圧縮アルゴリズムはプログラミング言語とは関係ありません!
最後にソースコードを添付します:
観光客の皆さん、この投稿の隠された内容を見たい方は、どうぞ 答える
|