クローラーエンジニアは何をしますか?あなたは本当に知っていますか?


プログラマーが素人に自分の仕事を説明するのが難しい場合もあれば、プログラマーが同僚に「あなたは何をしているのか」を明確に説明するのが難しい場合もあります。たとえば、Daivdが取り組んでいるセマンティックWebについて混乱しています。そこで、「クローラーエンジニア」の仕事内容、習得する必要のあるスキル、難しさや楽しさなど、何を言うかについてブログを書く予定です。

1.クローラーエンジニアは何をしますか?

1.主なタスクは何ですか?

インターネットは1つずつハイパーリンクで構成されています。あるWebページのリンクから別のWebページにジャンプできます。新しいWebページには多くのリンクがあります。理論的には、どのWebページからでも、リンクやリンクされたWebページへのリンクをクリックし続けることができ、インターネット上を移動できます。このプロセスはクモのようにウェブに沿ってクロールしますか?これが「爬虫類」という名前の由来でもあります。

クローラーエンジニアは、Webに沿ってクロールし、取得した情報を保存できる「スパイダー」プログラムを作成する必要があります。一般的に、クロールする必要のある情報は構造化されています。構造化されていない場合、意味がありません(データの80%が構造化されていません)。クローラーの規模は、Doubanの上位250の映画をクロールできる限り小さく、1週間定期的に天気予報をクロールすることができます。インターネット全体をクロールするのに十分な大きさのWebページ(googleなど)。次のすべてをクローラーと呼ぶことができると思います。

  1. クライミングの作者と答え

  2. Baiduネットワークディスクのリソースをクロールし、データベースに保存して(もちろん、リソースのリンクとタイトルのみを保存します)、ネットワークディスクの検索エンジンを作成します。

  3. 上記と同じように、トレントサイトの検索エンジンについても同じことが言えます。

この時点で、クローラーのタスクはデータを取得することであることがわかります。ビッグデータの人気が高まっています。インターネットの観点から、データは2つのタイプに分けることができます。1つはユーザー生成(UGC)で、もう1つは何らかの手段(通常はクローラー)を介して取得されます。クローラーは、Webページからデータを取得するだけでなく、アプリからパケットをキャプチャすることもできます。つまり、データを集約して構造化することです。では、どのジョブにクローラーが必要ですか?

2.クローラーは何ができますか?

一般的なデータ集約Webサイトには、クローラーが必要です。Google検索エンジンなど。Googleは、数ミリ秒以内に特定のキーワードを含むページを提供できます。Webページをリアルタイムで見つけるのではなく、事前に取得して独自のデータベースに保存することは間違いありません(データベースの大きさ)。 。したがって、シード検索エンジン、Webディスク検索エンジン、Resillioキーエンジンなどはすべて、クローラーを使用してデータを把握し、データベースに配置します。

さらに、価格比較Webサイトなど、情報比較を提供する一部のWebサイトでは、クローラーを使用してさまざまなショッピングWebサイトの商品の価格をクロールし、さまざまなショッピングWebサイトの価格をWebサイトに表示します。ショッピングサイトの価格は随時変動しますが、価格比較サイトで取得したデータは削除されないため、ショッピングサイトでは提供されない価格動向を提供することができます。

さらに、個人はクローラーを使用して楽しいことをすることもできます。たとえば、多数の写真を表示したい場合は、クローラーを作成してバッチでダウンロードできます。クリックして1枚ずつ保存する必要はなく、ウェブサイトの広告に耐える必要があります。 、クローラーを使用して、公開するすべてのコンテンツをキャプチャできるため、一部のWebサイトがバックアップサービスを提供していない場合でも、十分な食料と衣類を確保できます。

2.クローラーエンジニアはどのようなスキルを習得する必要がありますか?

「クローラーは低レベルで反復的なタスクであり、開発の未来はありません」ということわざを見てきました。これは誤解です。まず第一に、プログラマーにとって基本的に繰り返し作業はなく、繰り返し作業はプログラムによって自動的に解決されます。たとえば、ブロガーは、類似性は高いがhtml構造が異なる12以上のWebサイトを取得する必要がありました。単純なコードジェネレーターを作成しました。対応するhtml構造がわずかである限り、クローラーコードからユニットテストコードまでを自動的に生成できます。変更するだけです。ですから、プログラミングの面では基本的に繰り返し労働は存在しないと思います。繰り返しの仕事だと思ったら、もっと勤勉で怠惰になりたくないということです。また、勤勉なプログラマーは優れたプログラマーではないと思います。次に、この期間の私の仕事の経験に基づいて、クローラーが必要とする関連スキルについて話します。

1.基本的なコーディング基盤(少なくとも1つのプログラミング言語)

これは、あらゆるプログラミング作業に必須です。基本的なデータ構造を知っている必要があります。対応するデータの名前と値(辞書)、いくつかのURL(リスト)の処理など 実際、習熟度が高いほど良いです。クロールは単純な仕事ではなく、他の仕事よりも多くのプログラミング言語を必要としません。使用するプログラミング言語に精通し、関連するフレームワークとライブラリに精通していても、常に無害です。

私は主にPythonを使用しており、Javaでもクローラーを作成しています。理論的には、任意の言語でクローラーを作成できますが、関連するライブラリが多く、開発が迅速な言語を選択することをお勧めします。Cで書くことは間違いなく問題を求めています。

2.タスクキュー

クローラータスクが大きい場合、プログラムを作成して実行することは適切ではありません。

  1. 途中でエラーが発生した場合は、停止してやり直してください。この非科学的

  2. プログラムがどこで失敗したかを知るにはどうすればよいですか?タスクとタスクは互いに影響を与えるべきではありません

  3. 2台のマシンがある場合はどうなりますか?

そのため、タスクキューが必要です。その機能は、クロールする予定のWebページをタスクキューに入れることです。次に、ワーカーがキューから取り出され、1つずつ実行されます。1つが失敗した場合は、それを記録して次のワーカーを実行します。このようにして、ワーカーを1人ずつ実行することができます。また、スケーラビリティも向上します。何億ものタスクがキューに入れられても問題ありません。必要に応じて、追加の箸を食べるようにワーカーを追加できます。

一般的に使用されるタスクキューは、kafka、beanstalkd、celeryなどです。

3.データベース

言うまでもなく、データはデータベースに保存する必要があります。ただし、一部の小さなデータをjsonやcsvなどとして保存できる場合もあります。時々私はいくつかの写真をつかんで、ファイルを直接フォルダーに保存したいです。

クローラーによってキャプチャされたデータは一般にフィールドに値するため、mongodbなどのNoSQLデータベースを使用することをお勧めします。一部のフィールドには一部のWebサイトがあり、一部のWebサイトにはありません。Mongoはこの点でより柔軟性があり、クローラーによってクロールされるデータ関係は非常に非常に弱く、テーブル間の関係を使用することはめったにありません。

4.HTTPの知識

HTTPの知識は必要なスキルです。Webをクロールしたいので、Webを理解する必要があります。

まず、子ノード、親ノード、属性など、htmlドキュメントの解析方法を理解する必要があります。表示されるWebページはカラフルですが、ブラウザで処理されます。元のWebページは多くのタグで構成されています。処理にはhtmlパーサーを使用するのが最適です。通常のマッチングを使用すると、多くの落とし穴が発生します。私は個人的にxpathがとても好きです。それは言語を超えており、価格よりも表現が優れていますが、欠点もあります。定期的かつ論理的な判断は少し厄介です。

HTTPプロトコルを理解する必要があります。HTTPプロトコル自体はステートレスですが、「ログイン」はどのように実装されますか?これには、セッションとCookieを確認する必要があります。GETメソッドとPOSTメソッドの違い(実際、文字通りの意味以外に違いはありません)。

ブラウザは熟練している必要があります。クロールプロセスは、実際には人間がデータを閲覧するのをシミュレートするプロセスです。では、ブラウザはどのようにWebサイトにアクセスするのでしょうか。観察する方法、観察する方法を学ぶ必要がありますか?開発者ツール!Chromeの開発者ツールは、Webサイトにアクセスするためのすべての情報を提供します。トラフィックから、送信されたすべてのリクエストを確認できます。copy as curl関数は、ブラウザ要求とまったく同じようにcurl要求を生成できます。クローラーを作成する一般的なプロセスは次のとおりです。最初にブラウザーでアクセスし、次にcurlとしてコピーして、そこにあるヘッダーとCookieを確認し、コードを使用して要求をシミュレートし、最後に要求の処理結果を保存します。

5.運用と保守

このトピックについて話すことはたくさんあり、実際の作業での運用、保守、開発の時間はほぼまたはそれ以上です。すでに機能しているクローラーを維持することは大変な作業です。労働時間が増えるにつれて、私たちは一般的に私たちが書いたクローラーをより良く維持することを学びます。たとえば、クローラーログシステム、データ量の統計など。クローラーが機能しない場合は、クロールするWebページの構造が更新されているか、システムに表示されているか、クローラーが最初に開発されたときにクローラーが見つからなかったことが原因である可能性があるため、クローラーエンジニアを運用および保守から分離することも不合理です。戦略によると、インターネットに接続した後に問題が発生したか、相手のWebサイトでクローラーによってブロックされていることが判明したため、一般的に、クローラーの開発では運用と保守の両方を考慮する必要があります。

したがって、クローラーの操作と保守について、次のアイデアを提供できます。

まず、データからの増分監視。ターゲットクローラー(1つのWebサイトのみをターゲットとするクローラーを指す)は比較的簡単で、しばらくすると、一部のWebサイトのデータ増分について一般的に理解できるようになります。これらのデータの増加傾向が正常であるかどうかを確認するだけで十分です(Grafana)。ターゲットを絞らないクローラーのデータ増分はあまり安定していません。一般に、マシンのネットワークステータスとWebサイトの更新ステータスによって異なります(この分野での経験はあまりありません)。

次に、クローラーの実行の成功を確認します。前述のように、タスクキューはクローラーの作業を制御するために使用されます。このデカップリングには多くの利点があります。その1つは、クローラーの実行をログに記録できることです。各クローラータスクが実行されると、実行時間、ステータス、ターゲットURL、例外などがログシステム(kibanaなど)に記録され、クローラーの失敗率が視覚的な方法で明確に確認できます。

クローラーによってスローされた例外。ほとんどすべてのプロジェクトがエラーログ収集(Sentry)を使用します。ここで注意すべきことの1つは、通常の例外(接続エラー、ロックの競合など)を無視することです。そうしないと、これらのエラーに圧倒されます。

3つ、クローラーとアンチクロール

これも非常に深いトピックであり、攻撃的な武器や防御的な武器と同じように、双方が常にエスカレートしています。一般的な登山防止対策(私が遭遇した)は次のとおりです。

1.アクセス頻度

Webサイトに頻繁にアクセスしすぎると、IPが一定期間ブロックされる可能性があることはよく理解されています。これは、アンチDDoSの原則と同じです。クローラーの場合、このようなタスクの頻度を制限するだけで十分です。クローラーに人間のようなWebページにアクセスさせることができます(一定期間のランダムなスリープなど、3秒ごとにWebサイトにアクセスすると、明らかに通常の人間の行動ではありません)。

2.ログイン制限

また、比較的一般的です。ただし、情報を公開するウェブサイトには一般的にこの制限がないため、ユーザーは面倒です。実際、クライミング防止策は実際のユーザーに多かれ少なかれ影響を及ぼします。クライミング防止が厳しくなるほど、誤ってユーザーを殺す可能性が高くなります。クローラーの場合、ログインはシミュレートされたログインによって解決することもできます。Cookieを追加するだけです(ここでも、ネットワークの原則は非常に重要です)。

3.ヘッダーによってブロックされます

通常、ブラウザには、SafariやChromeなどのWebサイトにアクセスするためのヘッダーと、オペレーティングシステム情報があります。プログラムアクセスを使用する場合、そのようなヘッダーはありません。クラッキングも非常に簡単です。訪問時にヘッダーを追加するだけです。

4.JavaScriptスクリプトはWebサイトデータを動的に取得します

一部のWebサイト(特に単一ページのWebサイト)のコンテンツはサーバーから直接返されませんが、サーバーはクライアント側のJavaScriptプログラムのみを返し、JavaScriptがコンテンツを取得します。さらに高度なのは、JavaScriptがトークンをローカルで計算し、このトークンをAJAXに使用してコンテンツを取得することです。また、ローカルJavaScriptはコードが難読化および暗号化されているため、クローラーとしてソースコードを見てこの要求をシミュレートすることはほとんど不可能です(主にトークンを解読することは不可能です)が、別の角度から見ることができます:ヘッドレスブラウザー、つまり、このクライアントプログラムを直接実行します。これにより、実際のユーザーを100%シミュレートできます。

5.検証コード

これはほぼ究極の武器です。検証コードは、人とコンピューターを区別するために特に使用される手段です。アンチクローラーの場合、このアプローチは実際のユーザーと検索エンジンにとってより有害です(実際、検索エンジンクローラーのIPを記録することで、異なる方法で処理できます)。読者は確認コードを入力するという苦痛な経験をしていると思います。しかし、この方法は無敵ではありません!検証コードのほとんどは、現在非常に人気のある機械学習を通じて簡単に識別できます。GoogleのreCAPTCHAは非常に高度な検証コードですが、シミュレートされたブラウザを介して解読することもできます。

6.ip制限

ウェブサイトは特定されたIPを永久にブロックする可能性があります。この方法は多くの人的資源を必要とし、誤ってユーザーを傷つけるコストも高くなります。しかし、クラッキングの方法は非常に簡単です。現在、プロキシプールはクロールのほぼ標準的な構成であり、高度に隠されたプロキシなど、多くの便利なものもあります。したがって、基本的にこれは小さなクローラーしか殺すことができません。

7.アンチクロールWebサイトコンテンツ

一部のWebサイトは、人間だけが受信できる形式でWebサイトのコンテンツを表示します(実際、クロール防止とは、人間と機械を異なる方法で処理することです)。たとえば、コンテンツは画像の形式で表示されます。しかし、近年、人間と機械の違いはますます小さくなり、OCRの精度が非常に高くなり、写真を識別できるようになりました。

クライミング防止の概要

爬虫類とアンチクライミングは、攻撃と防御の間の典型的な相互アップグレードです。しかし、この種のエスカレーションは、終わりのない軍隊のようなものではないと思いますが、クローラーとアンチクライミングには終わりがあります。

クローラーの最後はブラウザーです。ブラウザーを使用すると、プログラムは実際のユーザーの要求をシミュレートできます。欠点は、DOMを解析してクライアント側のJavaScriptコードを実行するために新しいプロセスを開く必要があるため、リソースを消費することです。(ChromeのノードAPIはわずか2日でgithubでオープンソースになり、8kの星を獲得しました)

アンチクロールの終わりは、Googleのような非常に強力な検証コードです。結局のところ、検証コードの基本的な目的は、人間と機械を識別することです。

私はたまたまアンチクライミングの非常に良い例を持っています。Google Arts Projectプロジェクトは、世界的に有名な絵画を集めたアートギャラリーです。私はその中のいくつかの絵画が好きなので、いくつかダウンロードしたいと思います(もちろん、これは正しくありません)。その後、このWebサイトはクライミング防止に優れていることがわかりました(著作権は作品のコレクションに属しているため)。博物館なので、Google Arts Projectは確かにダウンロードを提供しません)、ダウンロードすることはほとんど不可能です。少し不満があり、いろいろな方法で元の画像をダウンロードしようとしました。試してみたところ、ウェブサイトのブロックでマウスの右ボタン機能が失われ、レビュー要素で画像が通常の画像ではないことがわかりました。追跡ネットワークパッケージでは、元の画像が1つのネットワークリクエストで取得されなかったが、base64エンコーディングの複数のリクエストに分割されていました。キャラクターストリームは毎回画像の一部を要求し、クライアント側で画像を組み立てます!もちろん、クライアントのコードは暗号化され、難読化されています。これは、クロール防止の教科書として使用できます。これにより、誤ってユーザーを傷つけることはなく、クローラーを起動できなくなります。

一度に要求されるのは画像の一部のみです

4、専門的な倫理

大規模なクローラーは一般にクラスターを使用し、一般的な小規模なWebサーバーの規模はクローラークラスターほど大きくない場合があります。したがって、多くの場合、クロールするWebサイトの頻度を制限するのが最善です。それ以外の場合、これらのクローラーはクラスターに対するDoS攻撃と同等です。一般的なWebサイトには、参照用にrobots.txtがあります。


要約すると、クローラーを作成するには、経験と柔軟な思考が必要です。たとえば、以前にWebサイトに遭遇し、トークンを取得するための確認コードが必要ですが、ネットワークリクエストを見ると、トークンがタイムスタンプのように見えることがわかり、ローカルでタイムスタンプを生成して機能することがわかりました。したがって、検証コードをバイパスするだけです。だから蓄積して試してみてください、あなたは怠惰になることができます、hehe。

さらに、クロールは以前思っていたような退屈な仕事ではありません。たとえば、非常にゴミが多く、非常に面白いWebサイトをたくさん見つけて、とても楽しいことがあります。私は多くのことを学びました。それは常に変化しています。


5.作業内容

情報はインターネット時代に遍在しています。Weibo、ソーシャルメディアサイトへの投稿、消費者レビュー、ニュース、営業担当者の訪問記録など、私たちが日常的に接触する大量の情報は、構造化されていないデータの一般的なソースです。非構造化データ分析は、テキストに隠された傾向と関連性を明らかにし、ビジネスの意思決定、業界の傾向に関する調査、およびホットコンテンツ分析を強力にサポートします。

Weihengチームは、最も優れた中国のセマンティック分析テクノロジーの作成に取り組んでいます。自社開発の中国語の単語セグメンテーション、構文分析、検索エンジン、エンティティ認識テクノロジーを、膨大な業界コーパスの継続的な蓄積と組み合わせることで、ビジネス顧客(マーケティング、広報、顧客サービス、販売部門と製品部門)、研究機関と政府部門は、データの監視と収集、分析と視覚化、およびビッグデータの時代におけるユーザーの競争力を強化するための専門的なサービスを提供します。

仕事の責任

1.分散型Webクロールプラットフォームの研究開発、改善、運用、保守。毎日数千万のWebページの収集、クリーニング、分析をサポートします。

2.高性能で、可用性が高く、スケーラブルなバックエンドコードを実現するための製品バックエンドAPIの開発。

3.オンライン分散環境の自動操作と保守、監視、およびパフォーマンスの調整。

仕事の要件

1.アルゴリズムとデータ構造の強固な基盤、および新しい知識とテクノロジーへの強い情熱。

2.問題を分析して解決する強力な能力を持っている。

3.優れたプログラミング習慣を持っている。

4.少なくとも1つの高レベルのプログラミング言語(Python / C ++ / JAVAなど)に精通しており、実際の開発経験がある。


この記事はから複製されます

https://www.kawabangga.com/posts/2277?from=%E6%96%87%E7%AB%A0%E9%A1%B5%E5%86%85%E9%93%BE%E6%8E %A5

終わり

以前の記事のレビュー

WeChatアプリレットのクロールスキルについて話します

フロントエンドのアンチデバッグを突破する-ページが常にデバッガーになるのを防ぐ

見れば見るほど、更新が速くなります

おすすめ

転載: blog.csdn.net/sergiojune/article/details/101043938