Webアヌカむブの開発のトピックに぀いお少し

Webアヌカむブは、サむトたたはサむトの䞀郚を元の圢匏で定期的に保存するシステムです。 ほずんどの堎合、これは埌䞖のために行われるため、「再生、クリック、 ノスタルゞア 」が可胜になりたす。



Webアヌカむブの基本的な芁件は、シンプルで包括的なものに思えたす。



サむトのオフラむンバヌゞョンは完党に機胜する必芁がありたす。 すべおの元の画像、Flashアニメヌション、埋め蟌みビデオ、スクリプトなどがそこに衚瀺されるはずです。 理想的には、元のものず異なるものであっおはなりたせん。




開発者にずっお、「フル機胜のオフラむンバヌゞョン」ずいう衚珟は非垞に疑わしいものです。 あなたはそれが皮肉に聞こえるず蚀うこずさえできたす。 結局のずころ、最新のサむトはスクリプトなしでは存圚せず、スクリプトは垞に動䜜の䞍確実性を生み出したす。 しかし、あるキャラクタヌが「結論に急ぐ必芁はありたせん。そうしないず、結論があなたを攻撃したす。」ず蚀いたす。







マテリ゚ル





正盎なずころ、オヌプン゜ヌスの情報を読み盎さないでください。 りィキペディアの蚘事から始めるこずができたす 。 残念ながら、そこには倚くの実装はありたせんが、組織的および法的問題に぀いおはさらに倚くのこずが蚀われおいたす。



興味のある人のために-読むこずをお勧めしたす。 残りに぀いおは、䞀般的な開発に関するいく぀かの甚語を瀺したす。



Webアヌカむブ 。 たずえば、最も重芁なむンタヌネットアヌカむブはarchive.orgです。 それは䜿甚の 量ず耇雑さで怖いです。



Webクロヌラヌ -リンクをたどっお、サむトのペヌゞを反埩凊理できるプログラム。 珟圚、圌らはたくさん離婚した。 おそらく、蚪問者が埅っおいる最も有名なロボットはGoogle Botです。 POCにはABotを䜿甚したした 。



システム党䜓を構築するにはストレヌゞ、むンタヌフェヌスなどが必芁ですが、残念ながらすべおが1぀の蚘事に収たるわけではありたせん。 したがっお、ここでは最も難しい郚分、぀たりサむトをクロヌルしおデヌタを保存するアルゎリズムに぀いおのみ説明したす。



゜リュヌションアプロヌチ





アヌカむブの問題を解決する方法は明らかだず思いたす。 サむトはナヌザヌ向けに䜜成されおいたす。 ナヌザヌは䜕をしたすか ペヌゞを開き、必芁な情報を蚘憶し、次のペヌゞぞのリンクをたどりたす。



仮想ナヌザヌロボットを䜜成しお、タスクを少し自動化しおみたしょう。



ロボットの操䜜の「履歎」ハロヌ、アゞャむルは次のようになりたす。
ロボットはナヌザヌずしおリンクを介しおペヌゞからペヌゞに移動したす。 移行埌、ペヌゞが保存されたす。 ペヌゞからフォロヌできるリンクのリストを䜜成したす。 既に枡されたリンクは無芖されたす。 未完成-保存など。




それは非垞に短く、非垞に抜象的に芋えたす。 蚭蚈の最初のステップは垞に抜象的であり、それが最初である理由です。 次に、詳现を説明したす。



詳现1




最初に、デヌタモデルの基本的な「分割できない」゚ンティティを自分で決定する必芁がありたす。 それをリ゜ヌスず呌びたしょう。 このように定矩したす



リ゜ヌスずは、リンクからダりンロヌドできるコンテンツです。




぀たり、その䞻なプロパティは、サヌバヌが返すリンクURIずコンテンツの存圚です。 完党を期すために、リ゜ヌスの説明にメタデヌタタむプ、リンク、最終倉曎時刻などを補足する必芁がありたす。 ずころで、リ゜ヌスには他のリ゜ヌスぞのリンクが含たれる堎合がありたす。



この抂念に基づいお、クロヌラヌの䞀般的なアルゎリズムを決定したす。



  1. 準備凊理のためのキュヌ゚ントリURI
  2. メむンルヌプキュヌからリンクを遞択する
  3. 指定されたリンクでリ゜ヌスをダりンロヌドしたす
  4. リ゜ヌスで䜕か圹に立぀ものを䜜る
  5. リ゜ヌスが参照するリ゜ヌス参照リ゜ヌスを調べる
  6. それらをキュヌに入れる
  7. サむクルの開始に移動




䞀般的に、論理的に芋えたす。 さらに詳しく説明できたす。



詳现2




ステップ0。 準備。




そのため、ロボットはプロセスの最初にありたす。サむトぞの゚ントリポむント、いわゆるむンデックスペヌゞぞのリンクのみがありたす。 このステップで、ロボットはキュヌを䜜成し、゚ントリポむントぞのリンクをそのキュヌに入れたす。



抜象的に蚀えば、キュ​​ヌはロボットのタスクの゜ヌスです。 これで、唯䞀の芁玠を持぀行は次のようになりたす。







泚小さなサむトの凊理キュヌはメモリに保存できたすが、倧きなサむトの堎合はデヌタベヌスに保存するこずをお勧めしたす。プロセスが途䞭で䞭断された堎合に備えお。



最初のステップ。 コンテンツ分析。




凊理するキュヌからリ゜ヌスを遞択したす。 最初の反埩では、これが゚ントリポむントです。 ペヌゞをダりンロヌドしお、参照しおいるリ゜ヌスを芋぀けたす。



構造-リ゜ヌスの説明



ここでは、䞀般的に、すべおが簡単です。 ペヌゞはsiteにありたす。 ロボットはそれをダりンロヌドし、リンクのHTMLコンテンツを分析したす。 リンクタむプに぀いおは、以䞋の「リ゜ヌスのタむプ」を参照しおください。 䟋には、robots.txtロボットは無芖したす:)、Aboutリンクはabout.html、CSSファむルずJavascriptファむルぞのリンク、Youtubeビデオぞのリンクのいく぀かのリンクが瀺されおいたす。



第二段階




䞍芁なリ゜ヌスを陀倖したす。 このために、ロボットは非垞に柔軟な構成むンタヌフェむスを提䟛する必芁がありたすほずんどの既存のむンタヌフェむスが提䟛したす。 たずえば、ロボットは、タむプ、拡匵、サむズ、および曎新時間でファむルをフィルタリングできる必芁がありたす。 アりトバりンドリンクの堎合、ネストの深さも確認する必芁がありたす。 明らかに、リ゜ヌスが既に䜕らかのリンクによっお凊理されおいる堎合は、それに觊れおはいけたせん。



残りの必芁なリ゜ヌスに぀いお、蚘述構造を䜜成し、キュヌに入れたす。 この段階の構造は完党に満たされおいるわけではないこずに泚意するこずが重芁です。元のオンラむンリンクのみが瀺されおいたす。 ぀たり、ステップ0の元の゚ントリポむントず同じです。



参照リ゜ヌス



重芁この段階では、「むンデックスペヌゞ」ペヌゞのコンテンツには元のリンクが含たれおいるため、オフラむンバヌゞョンずしお䜿甚できたせん。 凊理を完党に完了するには、リンクを眮き換える必芁がありたす。リンクはリ゜ヌスの保存されたオフラむンバヌゞョンを指す必芁がありたす。 キュヌを䜿甚するず、これを簡単に実装できたす。むンデックスペヌゞリンクを曎新するタスクをキュヌの最埌に配眮する必芁がありたす。 これにより、このタスクの開始たでに、参照されたすべおのリ゜ヌスが凊理されたす。







第䞉段階




䞀般に、これは最初のステップであり、参照されるリ゜ヌスごずにのみです。 ぀たり、アルゎリズムは実装がより単玔になりたす。ここでは、サむクルのステップを展開しお、図を単玔化したす。 このステップでは、ロボットはキュヌから次のタスクを取埗したす前のステップで远加されたタスクをダりンロヌドしたす 。



次に、リ゜ヌスがオフラむンで䜿甚するために必芁な倉換を芋぀けたす。 この䟋では、「埋め蟌み」ビデオを陀くすべおのリ゜ヌスが単玔にダりンロヌドされたす。YouTube経由で特別な方法でダりンロヌドされ、aviファむルずしおロヌカルに保存されたす。



その埌、参照されたリ゜ヌスのロヌカルオフラむンリンクが圢成されたす。



ロヌカル参照



重芁最初のステップず同様に、リ゜ヌスごずに発信リンクを識別し、それらを正しくキュヌに入れる必芁がありたす。







この䟋では、CSSファむルはimage.pngを参照しおいたす。



第4ステップ




参照されたリ゜ヌスおよびもちろんimage.pngを削陀した埌のキュヌ内の次のタスクは、むンデックスペヌゞのリンクを曎新したす。 ここでは、htmlペヌゞの構造を倉曎する必芁がある堎合がありたす。 たずえば、あるプレヌダヌを介しおオフラむンバヌゞョンのビデオを埋め蟌みたす。



ロヌカル参照



第5ステップ
最初のステップに進み、キュヌが空になるたで続行したす。



拡匵性





キュヌベヌスのアルゎリズムには1぀の欠点がありたす。リ゜ヌスは順次凊理されるため、最新のサヌバヌほど高速ではありたせん。



したがっお、䞊列凊理の可胜性を考慮する䟡倀がありたす。 䞊行性には2぀のオプションがありたす。





マむクロレベルでは、ロックに関する質問が発生したす。 思い出すず、䞀貫性を保぀ために「リンクを曎新する」タスクはキュヌの最埌に正確に眮かれたす。 このタスクが開始されるたでに、関連するすべおのリ゜ヌスがすでにロヌカルリンクを受信しお​​凊理されおいるず予想されたす。 䞊列操䜜では、この条件に違反するため、同期ポむントを入力する必芁がありたす。 たずえば、単玔なオプションは、ダりンロヌドタスクを非同期的に開始するこずです。 リンクを曎新するタスクが衚瀺されたら、アクティブなダりンロヌドタスクいわゆるバリアの完了を埅ちたす。 難しいオプションは、セマフォを介しおタスク間に明瀺的に䟝存関係を導入するこずです。 ただ深く分析されおいないオプションがただあるかもしれたせん。



リ゜ヌスタむプ





明らかに、そのようなクロヌラヌが凊理しなければならないあらゆる皮類のリ゜ヌスを予枬するこずは䞍可胜です。 しかし、少なくずもどのような困難に盎面するかを知るために、私たちは詊みたす。







動的ペヌゞ





ロボットは私に質問をしたす「それでも-動的ペヌゞ、スクリプトなどに぀いお䜕を決めたのですか」 答えは次のずおりです。怜蚌では、すべおのペヌゞが等しく「動的」ではないこずがわかりたす。 次のレベルのペヌゞダむナミズムを定矩したす。







ダむナミズムのレベルが高いほど、オフラむンコンテンツを維持するこずが難しくなりたす。






All Articles