クローラーで2年間(Webマイニング)

免責事項:このトピックは、部分的に自己宣伝、「水」、ナンセンスかもしれませんが、ほとんどの場合、自分自身と興味のある人のために、スクレイピングの分野で2年間にわたって得られた情報と経験の分類にすぎません。



カルマを追いかけません、それで十分です。



カットの下-分類と機能を備えたクローラー/パーサーの現代市場についての小さな投稿。



件名



私たちは「スパイダー」、つまりWeb上の情報を収集するプログラムについて話しています。 クモは異なる可能性があります-ほとんどがウェブを登り、一部のトレント、いくつかのfido / ed2kおよび他の興味深いもの。 本質は一つです-顧客が必要な情報を提供するのに便利な形で。



残念ながら、S。シュルガ( ゲートキーパー )はこの業界を過大評価していました-情報マイニングは一般的なものですが、それでもAIテクノロジーはあまり使用されておらず、自動アドバイザーからはほど遠いものです。 基本的に、クモはいくつかのカテゴリに分類され、使用される方法の複雑さによって区別されます。



分類



シンプルなクローラー


通常、PHPの安価でシンプルなスクリプトは、サイトを順番に収縮させ、価格、属性、写真をデータベースに保存し、それらを処理することができます。 あなたはフリーランサーに基づいてプロジェクトのコストを見ることができます、それは通常ばかげています。 主に1回限りのプロジェクト。 IPまたはクエリ速度によって禁止されています。



グループクローラー


同様のプロジェクトをcenugids.lvに実装しました。 この場合、多くの(50以上の)クローラーが同じコードベースを使用するか、複数のソース(cenugids.lvの場合はショップでした)のインターフェースを持つ1つのクローラーです。 主に、同様のソース(フォーラム、ショップ)から情報を収集するために使用されます。



行動クローラー


これは、ボットを人に見せかけることを意味します。 顧客は通常、特定の行動戦略を求めます。たとえば、昼休み、1分あたり2ページ、週3〜4日の稼働週にのみ情報を収集します。 TKには、リリースに応じて「休暇」の中断や「ブラウザバージョン」の変更が含まれることもあります。



キャッシングクローラー


技術的には最も厄介なソリューションで、c ebayのサイズの何かをこするために使用されます。 通常、いくつかの部分で構成されます-歩き回る価値のあるソースの場所から選択します(たとえば、店舗の場合、これらはカテゴリとページです)。 このプロセスは非常にまれです、なぜなら この情報は非常に一定です。 さらに、ランダムな間隔で、クモは「興味深い場所」まで歩いて行き、データ(商品など)へのリンクを収集します。 これらのリンクは再びランダムな遅延で処理され、データベースに入力されます。



このプロセスは定期的ではなく、継続的です。 それと並行して、古いリンクをチェックしています-つまり 5分ごとにデータベースから10個のキャッシュされた商品を選択し、それらが生きているかどうか、価格と属性が変更されたかどうかを確認します。



この技術的に最も厄介なソリューションでは、顧客はある時点でのソースのスナップショットに関するデータではなく、クローラー自体のベースから多少なりとも新しい情報を受け取ります。 当然のことながら、最終更新日があります。



問題と方法





発見


サイトが流出していることを理解するのは非常に簡単です(少なくとも統計を見れば)。 リクエストの数はページの数と同じです-何がもっと目立つでしょうか? これは通常、キャッシングクローラーの使用とスケジュールのクリアによってバイパスされます。 当然、あなたはターゲットサイトへのトラフィックのために出ることができません。



IP禁止


戦争の初めに管理者と遭遇する最も簡単なこと。 最初の方法は、プロキシを使用することです。 マイナス-インフラストラクチャを維持し、プロキシリストを更新し、顧客に転送し、一度に失敗しないようにする必要があります。 もちろん、一度限りの注文では、これは消えます。 ただし、このようなインフラストラクチャとインターフェイスを実装するには1週間かかりました。



2番目のオプションはTorです。 匿名化の優れたP2Pネットワーク。希望する国と出口を指定できる理想的なインターフェースを備えています。 原則として、キャッシュ決定の速度はそれほど重要ではありません。 パフォーマンスは十分です-すべての出口点を禁止しているクライアントがまだ1つあり、iptablesルールは既に9000を超えています(9873の執筆時点で)が、結果はまだありません...



登録/承認


経験が積まれるにつれて解決される些細な問題。 ログイン/記録されたCookie /ログイン/ parsim。 CAPTCHAも同様に壊れます。



無限に行く


サイトが何らかの形で無限の数のリンクを生成する場合、パーサーはおかしくなります。 たとえば、毎回osCsid(OsCommerce SessionID)/ PHPSESSIDを追加すると、クローラーはリンクを新規として認識します。 更新時に一般的に疑似ランダムリンクを生成するストアを見ました(したがって、検索エンジンでは、1つの製品が異なるURLを持つ50以上のページに配置されていました)。 最後に、ソース内のバグは、無制限の数のリンクを生成することもあります(たとえば、7000 +の空白ページのどこかに、次のリンクと現在のリンクから+5ページを表示するストアなど)。



エンコーディング


奇妙なことに、最大の問題はエンコーディングです。 cp1251? HTMLエンティティ? Unicodeテーブルの5種類の「スペース」? そして、顧客がXMLを要求し、1つの間違った文字がsimplexmlをきっちりと殺す場合はどうでしょうか



エンコードエラーのリスト全体は、おそらく私が示すのが面倒です。 簡単に言うと-データの後処理では、私のクローラーでは、エンコード処理はほぼ正確に半分です。



プラットフォーム



人々はPHPが大好きです。 通常、PHP + simplexml、またはPHP + DOM / XPath。 Xpathは一般に不可欠ですが、PHPシステムには2つの大きな欠点があります-それらは食べたり落ちたりします。 mbstringを使用する場合、クローラーあたり512メガバイトは正常です。もちろん、XMLで+1タグを作成しようとするときのコアダンプは言うまでもありません。 小さなサイトを処理するとき、これは目立たないが、一度に50メガバイト以上がソースからダウンロードされるとき...したがって、基本的に、深刻なPHPプレイヤーは去ります。



私の選択はPythonです。 XPathに加えて、ed2k、kazzaa、torrent、任意のデータベース、完全な文字列処理、速度、安定性、OOPのライブラリがあります。 さらに、クライアントへのデータ配信のために独自のミニサーバーをそこに埋め込む機能により、サーバーに負荷をかけすぎないようにすることができます。



おわりに



興味のある方は、別の記事で、キャプチャを破る方法、ユーザーエージェント保護をバイパスする方法、サーバーの発行を分析する方法、および非Webソースを解析する方法について説明できます。 質問がありますか? kamentyまたはPMへようこそ!



All Articles