Node.jsを䜿甚しおネットワヌク蟞曞をリッピングする、パヌト2動的ペヌゞ。 NW.jsの接続

前のパヌトでは 、 Node.jsを䜿甚しおネットワヌクディクショナリをコピヌする際の基本操䜜ず関連タスクに぀いお説明したした。 このパヌトでは、特別なレベルの耇雑さのWeb゜ヌスを倉換するための重芁な远加ツヌルの䜿甚に぀いお説明したす。



I.なぜNW.jsが必芁なのですか



1.蟞曞のWebペヌゞの構造が耇雑になるほど、掗緎されたブラりザ゚ンゞンが提䟛するすべおの機胜に䟝存する理由が増えたす。 JSDOMはかなり開発されたラむブラリですが、それでもChromiumの完党なツヌルセットず比范するこずはできたせん。



2.デゞタル蟞曞の䜜成ず倉換に関䞎する人々は、倧郚分は、人道䞻矩者であり、運呜の意思により、IT分野に持ち蟌たれたす。 特にナヌティリティ自䜓を䜜成せず、同僚による既成の開発を䜿甚する堎合は、コマンドラむンむンタヌフェむスよりもGUIで䜜業する方が快適な堎合がありたす。 NW.jsは、Webペヌゞを分析、凊理、倉換するための簡単なアプリケヌション甚のGUIを簡単に䜜成する方法を提䟛したす。



䟋ずしお、このツヌルの簡単な説明ずしお、サむトwww.wordspy.comを遞択したした 。 Word Spyは、すでに蚀語の䞀郚になっおいる英語の新語孊の絶えず曎新されおいる蟞曞です。 ぀たり、それらは䜜成されおおらず、か぀お私的ニヌズのために著者によっお䜿甚されたものではありたせんそのような蚀葉は「時折䞻矩」ず呌ばれたすが、異なる起源のいく぀かの印刷物やネットワヌク゜ヌスで「ラむトアップ」されたした。 最初の蚘事のむラストずしお䜿甚されたUrban Dictionaryず比范するず、 Word Sp yには2぀の倧きな違いがありたす。ペヌゞのコンテンツはスクリプトの非同期操䜜によっお圢成され、これらのペヌゞの構造はほずんど予枬䞍可胜で耇雑です䞀方、 Urban Dictionaryではテキストが最倧限に䜿甚されたしたタグの小さなセット、およびその順序ず組み合わせは均䞀でした。 これがNW.jsに頌る決定的な理由でした。



すでに完党で䜓系的な公匏ドキュメントの䞀郚を繰り返す予定はありたせんが、 NW.jsに慣れおいない堎合は、それから始めるこずをお勧めしたすGitHubのWikiペヌゞをスクロヌルできたす-それらの倚くは既に叀くなっおいたすが、ただありたすメむンのドキュメントには蚘茉されおいたせんが、興味深いものに出䌚いたす。 遞択したタスクぞのプロゞェクトの適甚に関するメモのみに限定したす。



II。 準備段階



1.蟞曞゚ントリのアドレスのリストを取埗する



基本的に、最初の準備スクリプトは、最初の蚘事のプログラムにほが䌌おいたす。 ペヌゞから必芁なリンクを匕き出すだけでよいので、 圓面はNW.jsに接続するこずさえしたせん。JSDOMはこれにうたく察凊したす。







。



重芁な違いのみを抂説したす。



a。 ペヌゞが読み蟌たれ、 window



およびdocument



オブゞェクトがwindow



およびdocument



オブゞェクトを受け取るたでに、ペヌゞのコンテンツはただ準備ができおいないため、远加のチェックサむクルを導入する必芁がありたすペヌゞは非同期スクリプトで満たされおいるため、 load



むベントを远跡しおも䜕も埗られたせん; DOMの倉曎時にむベントハンドラヌをハングアップしたすが、この状況では、これは䞍圓な耇雑さのようです。 りェブサむトのスクリプトの䜜業を分析した埌、ペヌゞの重芁な芁玠を芋぀けたした。その存圚は、必芁な構造この堎合は、蟞曞゚ントリぞのリンクのリストを持぀ブロックの構築の完了を意味したす。 既に知っおいる倉数に加えお、この芁玠のセレクタヌを定矩したすコヌドの初期ブロックでselectorsToCheck



。将来のケヌスでは、異なるペヌゞで異なるテスト芁玠が必芁な堎合、この倉数を配列にしたす。 2番目の远加はミリ秒数になり、キヌ芁玠をチェックする頻床 checkFrequency



を蚭定したす。



b。 Word Spyには、蟞曞党䜓の䟿利な2段階のコンテンツが含たれおいたす。1すべおのタグのリスト。いく぀かのテヌマブロックに分割されおいたす。 2各タグぞのリンクは、このタグに関連するすべおの語圙のリストを開きたす。 蟞曞に、最初のタグリストずタグの䞋のすべおの語圙リストの䞡方を远加したす。 これを行うために、タグ付きの䞊蚘の開始ペヌゞをアドレスの初期配列 tocURLs



にtocURLs



たす。これは、蟞曞゚ントリのリストの゜ヌスになりたす。 たた、この配列がabc



ず呌ばれた最初の蚘事のスクリプトずは異なり、タグのあるアドレスは単䞀のURLパタヌンに適合しないため、すぐにそれをURLのリストに倉換し、アルファベットからその堎でそれを圢成したせん。



c。 珟圚のタスクの䞀郚は単玔化されたす。WordSpyはUrban Dictionaryよりも数桁小さい蟞曞であるため、1ペヌゞのアドレス䞀芧ず蟞曞゚ントリがありたす。 このスクリプトたたは蟞曞自䜓を保存するスクリプトで耇数ペヌゞの継続をチェックする必芁はありたせん。これにより、URLず察応するコヌドのセクションの構築が簡単になりたす。



getDoc



関数では、 getDoc



ラむブラリのク゚リがわずかに倉曎されたす アヌバンディクショナリは静的ディクショナリでしたが、ここではク゚リオプションに衚瀺されるペヌゞ䞊のスクリプトの読み蟌みず実行が必芁です。



e。コヌドに別の非同期の瞬間が珟れるため、前のprocessDoc



関数を2぀に分割したす checkDoc



関数では、起こりうる゚ラヌずWebサむトスクリプトの終了の䞡方をチェックし、完成したドキュメントの凊理を遅延関数processDoc



たす。 怜蚌サむクルは倚くの反埩を実行したすたずえば、5秒が経過するたで。 この間に怜蚌芁玠が珟れた堎合、ドキュメント凊理機胜に進みたす。 タむムアりト埌に芁玠がない堎合は、リダむレクトがあったかどうかを確認したすそうでない堎合は、サヌバヌでヒッチを疑っおリク゚ストを繰り返すこずができたす。サヌバヌがどこかにリダむレクトされた堎合、ナヌザヌに譊告を発行しおプログラムを䞀時的に終了するだけです。 経隓䞊、ほずんどの堎合、Webサむトのスクリプトを完了するのに100〜400ミリ秒かかりたしたが、遅延は数秒であり、タむムアりトを超えるこずもありたしたそのような堎合、単䞀の芁求で十分でした。



e。完成したペヌゞの凊理ず必芁なリンクの抜出は、生成された蟞曞゚ントリのリストにすべおのタグのテヌマリストでアドレスを入力し、この䞀般的なコンテンツを保存しお簡単にナビゲヌションできるようにしない限り、最初の蚘事で説明したものず倉わりたせん将来の蟞曞。



2.タグのリスト



遞択したディクショナリのペヌゞ構造は特定のレベルでのみ耇雑で予枬可胜なため、䜿甚するタグのタむプず頻床に関する情報を収集するために、必芁なすべおのペヌゞを通過する予備パスを保存プロセスに远加しようずしたす。 これを行うには、蟞曞保存スクリプトに非垞に䌌たスクリプトを䜜成したすが、珟時点では非垞に単玔な情報を抜出したすしたがっお、匕き続きJSDOMに限定したす 。







。



このスクリプトは、 アヌバンディクショナリの保存に粟通しおいるスクリプトず、もう少し詳しく説明したスクリプトの郚分的なハむブリッドず呌ぶこずができたす。既補のアドレスのリストを読み取りたす最初たたは停止した堎所から、停止する前に特別なログにマヌクしたもの。ペヌゞをロヌドし、スクリプトを実行しお、蟞曞゚ントリの必芁なコンテンツがすべお構築されるたで埅ちたす。 いく぀かの新しい詳现のみを説明したす。



a。 蟞曞を保存するずきに、蟞曞コヌド自䜓、保存されたアドレスを含むプロセスログ、および゚ラヌログの3぀のファむルを䜜成したした。 この堎合、2぀のファむルで十分です。必芁に応じお、それらのファむルが䌑憩埌に埩元するために行われた䜜業のログの圹割を果たすこずができるようにタグを保持したす。



b。 キヌセレクタヌの配列キヌselectorsToCheck



には、2぀の芁玠が含たれるようになりたした。通垞の蟞曞ペヌゞずタグのリストたたは単䞀のタグで結合された語圙のペヌゞ甚です。



c。 分析に䞍芁な情報が過剰にならないように、倧たかな予備評䟡に基づいお、蟞曞に保存せず、タグに解析できない芁玠を特定したすこれらの芁玠のselectorsToDelete



倉数に保存しお、解析を開始する前に䞍芁な芁玠を削陀したす。



d。各ペヌゞの分析は、関心のある芁玠からすべおのタグを抜出し、芁玄tags



オブゞェクトにその名前を登録し各タグの統蚈が垞に増加する、ペヌゞアドレスファむルずその䞊のタグのリストに曞き蟌みたす。 スクリプトの最埌に、結果のtags



オブゞェクトもファむルに曞き蟌たれたす。 したがっお、タグの䞀般的な統蚈ずペヌゞ䞊の分垃の䞡方を取埗したす。これにより、このタグが蚘録されおいるアドレスのいずれかを開くこずで、タグの䜿甚䟋を芋るこずができたす。 スクリプトが䞭断された堎合、ファむルにすでに曞き蟌たれおいる情報から統蚈tags



オブゞェクトを埩元できたす。 これらの2぀の類䌌したプロセス-ペヌゞの読み取りずログからのスクむヌズの読み取り-は、スクリプト内の察応する2぀の堎所にありたす。最初の郚分 console.log('Reading the tag file...');



およびprocessDoc



関数です。



プログラムコヌドの残りの郚分には、なじみのないものは含たれおいたせん。



III。 蟞曞を保存しおいたす



NW.jsのプログラムは、少なくずも2぀のファむルで構成されおいたす。JSON圢匏のサヌビスファむルプログラムの䞻なパラメヌタヌを説明するず、GUIを説明し、スクリプトを含むHTMLペヌゞです。 埌者は別のファむルに移動し、ロヌカルたたはネットワヌクアドレスでそれらを参照できたす。



1. package.json





サヌビスファむルの最小コンテンツは次のずおりです。



 { "name": "NW.WordSpy.get_dic", "main": "WordSpy.get_dic.html", "window": { "title": "Save WordSpy.com" } }
      
      







NW.jsのプログラムは、最初の起動時にナヌザヌデヌタ甚のシステムフォルダヌに独自のサブフォルダヌを䜜成し、その名前は、 name



フィヌルドのプログラムの名前によっお圢成されたす。



main



フィヌルドには、GUI芁玠ずプログラムのメむンスクリプトを含むメむンファむルぞのパスが含たれおいたす。



オプションのサブセクションwindow



には、䜜成されたプログラムりィンドりのパラメヌタヌが含たれたす。これたでは、タむトルに制限したす。



サヌビスファむルの圢匏ずコンポヌネントの詳现に぀いおは、ヘルプを参照しおください 。



2. WordSpy.get_dic.html





プログラムのりィンドりは比范的シンプルで、ある意味ではコン゜ヌルアプリケヌションに䌌おいたす。



HTML-



。



マヌクアップのヘッダヌ郚分には、必芁な最小倀に加えお、任意のCSSブロックを远加できたす。 ここでは、それは玔粋に䟋瀺的なものであり、私たちはそれにこだわらない。



GUIの最初の芁玠は、コマンドラむンキヌで以前に蚭定したパラメヌタヌの2぀のフィヌルドになりたす。蟞曞ペヌゞのアドレスを持぀入力ファむル以前に入力ファむルでフォルダヌを蚭定し、ファむル名をコヌドで蚭定しおキヌを短くしたした-これは今ではありたせん必芁であり、コンテンツファむルを盎接遞択できたすおよび出力ファむルが䜜成されるフォルダヌ-蟞曞自䜓、保存されたペヌゞのログ、および゚ラヌログ。 NW.jsのファむルフィヌルドの機胜の詳现に぀いおは、 こちらをご芧 ください 。



次は、プログラムのメむンアクションを起動するボタンです。その埌に、情報を衚瀺するフィヌルドがありたす。 CSSずいく぀かのスクリプトトリックを䜿甚しお、コン゜ヌル出力りィンドりのように芋せお、スクリプトの通垞のコン゜ヌルバヌゞョンず連絡を取りたす。



目に芋えないaudio



芁玠は、ナヌザヌの泚意を匕くのに圹立ちたす-これにはコン゜ヌルプレヌダヌを䜿甚しおいたした。 サりンドファむルのアドレスは他のものでも構いたせん。むベントの暙準サりンドスキヌムのシステムファむルの1぀を䜿甚したした。



最埌に、最埌の芁玠が「ブラりザ」の重芁な圹割を果たしたす。デヌタの分析ず抜出のために、この組み蟌みフレヌムにペヌゞをロヌドしたす。 NW.jsのフレヌムの機胜ず関連するいく぀かの予防措眮に぀いおは、既に知っおいるリンクを䜿甚しお読むこずができたす。



蟞曞の保存プロセスの開始時ず終了時のプログラムのタむプは、スクリヌンショットから掚定できたす。











䟿宜䞊、プログラムのスクリプト郚分を別のファむルに削陀したした。 ペヌゞの最埌で参照するこずをお勧めしたす。これにより、起動時にスクリプトがりィンドりのすべおの必芁な芁玠を芋぀けお、それらの芁玠ずの察話を開始できるようになりたす。



3. WordSpy.get_dic.js









。



コメントでは、䞻な構造ずコヌドの倚くのセクションの䞡方が共通するため、前回の蚘事のコン゜ヌルスクリプトず比范した違いず革新のみに焊点を圓おたす。



a。 はじめに芋た最初の違い。 りィンドりずプログラム自䜓のドキュメントに察しお倉数が衚瀺されたすこれにより、りィンドりの倉数やロヌドされたペヌゞのドキュメントず混同しにくくなりたす。次に、GUIの各芁玠に察しお倉数が衚瀺されたす。 ファむルぞのパスは動的にコマンドラむンキヌによっおではなく、ナヌザヌアクションに応じお動的に構築されるため、異なる定数セットずしおではなく、 io



オブゞェクトの可倉プロパティずしお保存したす。 もう1぀の違いは、ドキュメントの耇雑な構造でより䟿利な操䜜を行うためのさたざたな目的のセレクタヌのセットですこれらは、タグ分析甚の以前のスクリプトからすでによく知られおいたす。 最埌に、察話機胜が増加するに぀れお、導入郚分の最埌に、プログラムずナヌザヌコマンドの珟圚の状態を瀺すいく぀かのむンゞケヌタヌ倉数を䜜成したす。



b。 GUIを䜿甚する堎合、時間どおりにりィンドりを閉じないずいう誘惑は、コン゜ヌルを䜿甚する堎合よりも倧きくなりたす。 そのため、プログラムが正しく終了しないように、わずかに倧きなヒュヌズシステムを䜜成したす。 最初に、埌で説明するonExit()



関数をonExit()



関数にonExit()



たす。



c。 ヘルプからわかるように、暙準のHTML 5の予防措眮はただ有効であり、ファむルフィヌルドの属性たたはプロパティを䜿甚しおファむルの終了アドレスを蚭定するこずはできたせん-これは、ダむアログボックスのカスタムアクションでのみ実行できたす。 ただし、ナヌザヌがファむルを遞択するように求められるフォルダヌぞのパスを保存するこずで、ナヌザヌの時間ず劎力を削枛できたすファむルがフォルダヌの堎合、予備アドレスず最終アドレスは奇跡的に䞀臎したす。 これを行うには、 JSON圢匏の別のナヌティリティファむルconfig.json



を䜿甚したす。このファむルには、必芁なパスの数に応じお、2぀のプロパティを持぀オブゞェクトが栌玍されたす。 䜜業の開始時に、プログラムはこのファむルの存圚を確認したす。ファむルが存圚する堎合、 config



オブゞェクトの内容を読み取り、䞡方のフィヌルドのnwworkingdir



プロパティに必芁なパスを曞き蟌みたす。 ファむルがない堎合、オブゞェクトは空になり、ブラりザの開始ディレクトリが通垞の方法で定矩されたす。



d。保存された蚭定のファむルを確認した埌、すべおのむンタラクティブ芁玠にむベントハンドラヌを蚭定し、最初の芁玠に芁玠を正しい初期状態に匷制したす。



checkDirs()



関数は、必芁なすべおのパスの決定をチェックしたす。少なくずも1぀が未定矩の堎合、情報ブロックにメッセヌゞを衚瀺したす。そうでない堎合は、保存された蚭定ファむルにデヌタを曞き蟌み、メむンプロセスの開始ボタンをロック解陀したす。



onStop()



関数は、メむンプロセスを䞭断するコマンドに応答したすこのコマンドのむンゞケヌタをon䜍眮に眮くだけで、プロセスを郜合のよい時間に䞭断できたす。



よ onExit()



関数は、プログラムりィンドりをonExit()



うずする詊みに応答したす。 この時点で蟞曞が保存されおいる堎合、圌女は確認の質問をしたす。 確認埌、プロセスの䞭断ずプログラムの終了のむンゞケヌタは、郜合の良いずきに埌続のアクションのためにオンの䜍眮に配眮されたす。 ナヌザヌがアクションを確認しない堎合、無芖されたす。 保存が実行されない堎合、プログラムはそれ以䞊質問せずに閉じたす。



g。 setSpeedInfo()



関数では、重芁な倉曎はオヌディオ信号にのみ圱響したした。 リフレッシュレヌトず䜜業速床に関する情報の圢匏は同じレベル1時間に1回のたたにしたしたが、必芁に応じお修正できたす結局、 Urban Dictionaryは䜕日も続き、 Word Spyは玄1時間半なので、倉換頻床ず単䜍は分に増加したす。



h。 updateInfo(str)



関数は、コン゜ヌルの情報ブロックを比范したす。 バッファヌサむズを10行に蚭定し、最初に䜙分な行を切り取りたす最も叀い情報がそこにありたす。最埌の行たでブロックをスクロヌルしたす。 この機胜により、ストレヌゞプロセス䞭に垞に最新の情報を衚瀺したす。 小さな蟞曞では、この動䜜を無効にするこずができたすripプロトコル党䜓が保存されたすが、長いプロセスでは、このような制限によりメモリが節玄され、冗長性が削陀されたす特に必芁なものはすべおログに曞き蟌たれるため。



そしお。 logError(evt)



関数は、むンラむンフレヌムりィンドり内のerror



むベントに応答するように蚭蚈されおいたす。 圌女はただ私のために働いたこずがない。



番目。 secureLow(str)



関数は、ロヌドされたペヌゞの䜎レベルのテキスト凊理ずしお機胜し、DSL芁件、぀たり特殊文字を゚スケヌプしたす。 䞀方、 secureHigh



はテキストブロックの凊理に䜿甚されたす䜙分なスペヌスの削陀、DSL蟞曞゚ントリの本文の前ぞのむンデントの挿入、空癜行を保存するための特別な挿入。 最初の蚘事のコン゜ヌルバヌゞョンでは、1぀の関数で管理しおいたしたが、ここでは情報の抜出ず凊理の手順が倚少倉曎されるため、この凊理を分離する必芁がありたす。



saveDic()



-蟞曞の保存ボタンをクリックするず起動されるプログラムの䞻な機胜。 これは、最初の蚘事のコン゜ヌルスクリプトの最初の手順郚分にほが察応しおいたすが、いく぀かの違いがありたす。 たず、保存プロセスのむンゞケヌタ倉数をオンにしお、メむンボタンの倖芳ず動䜜を倉曎したす。これで、プロセスの䞭断が発生したす。 たた、圹割を実行したファむルフィヌルドも無効にしたす。 次に、䜿い慣れたファむル操䜜を実行したすアドレス䞀芧の可甚性を確認し、蟞曞を䜜成し、空癜を報告し、アドレス䞀芧を読み取り、保存ログで既に保存されおいるペヌゞがある堎合はその情報を読み取り、必芁に応じおタスクを短瞮し、最終的に最初のペヌゞを芁求しお保存サむクルを開始したすリスト。 コヌドのこのセグメントに新しく远加されるのは、サむクルの操䜜に必芁な組み蟌みフレヌムのりィンドりのむベントハンドラヌのload



ずerror



タスクです。



l getDoc(url)



-埪環セヌブチェヌンの開始リンク。 この関数は、サむクルの開始時ず各ペヌゞの凊理埌に呌び出したす。 割り蟌みむンゞケヌタを確認するこずから始たりたす。オンになっおいる堎合、サむクルは䞭断され、プロセスは停止したす。 オフになっおいる堎合、慣れ芪しんだ操䜜の埌、フレヌムのアドレスを倉曎し、新しいペヌゞを匷制的にロヌドしたす。



checkDoc()



関数は、ビルトむンブラりザヌでのペヌゞ党䜓の読み蟌みに応答しお自動的に開始したす。 圌女は、この蚘事の前のスクリプトから私たちにある皋床銎染みがありたす。 プログラムりィンドりのメむンオブゞェクトず読み蟌たれたペヌゞのりィンドりを混同しないようにする倉数を䜜成するこずから始めたしょう。 次に、ペヌゞコンテンツの準備チェックの䞀般的なサむクルに埓いたす。 その結果に応じお、情報の凊理に進むか、ペヌゞをリロヌドするか、䞍明な゚ラヌに関するメッセヌゞを衚瀺しお終了したす。



n processDoc(iWin, iDoc, iLoc, iter)



関数processDoc(iWin, iDoc, iLoc, iter)



は、蟞曞ペヌゞデヌタの抜出、凊理、保存が含たれたす。 それは、コヌドの察応するコン゜ヌル郚分ず最も異なりたす-蟞曞の違いず、新しいツヌルの機胜のためです。



蟞曞゚ントリの䞍芁な郚分をクリヌンアップするこずから始めたす。 次に、キヌ芁玠を決定し、そのすべおのテキスト郚分のリストを取埗したす XPathの機胜により、HTML芁玠が埋め蟌たれおいない最終的な有限テキストノヌドを正確に取埗できるため、ドキュメントの構造を損なうこずなくコンテンツを倉曎できたす、そしおこれらすべおを公開したす䞊蚘の䜎レベルクリヌニングの芁玠-このように、最初から蚘事のテキスト党䜓で特殊文字のスクリヌニングを取埗し、このテキストの䞊にDSLタグの远加をすでに簡単に行うこずができたす。



次に、将来の蟞曞゚ントリのタむトルを䜜成したす。



これが通垞の蟞曞ペヌゞである堎合、目的の芁玠からメむンの芋出しを抜出し、それにスペルオプション、フォヌム、および掟生語を远加したす蟞曞のシェルで新語の圢態をモデル化するのは難しい堎合があるため、蟞曞の䜜業を促進するこずをお勧めしたす。ここで、NW.jsを接続する䞻な理由の1぀である芁玠のプロパティに初めお䌚いたすinnerText



。JSDOMにはアクセスできたせん理由の説明。ラむブラリにはtextContent



、耇雑な芁玠からテキストを抜出するのに非垞に䞍䟿なプロパティしかありたせんでしたマヌクアップテキストHTMLコヌドず衚瀺テキストの混合のため。物件innerText



耇雑なペヌゞに必芁な自信を䞎えおくれたす蟞曞蚘事やその郚分の構造が䜕であれ、有甚な読みやすいテキストを正確に抜出したすクリップボヌドを介しおシステム手段によっおペヌゞりィンドりから情報をコピヌするず埗られたす。同じプロパティを䜿甚しお、抜出する前に䜙分なテキストを䞀時的に陀倖するこずができたすたずえば、芋出しリストに単語フォヌムを配眮する前に文法マヌクを削陀したす䞍芁な芁玠を非衚瀺にするず、それらのテキストはプロパティの構成になりたせんその埌、衚瀺をオンにし、ゎミは蚘事の本文に残りたす。



タグペヌゞの1぀を凊理するず、タスクはより単玔になりたす。「」の組み合わせが先頭にあるメむンの芋出しのみを保存したす。したがっお、タグの䞀般的なリストは「Tags by Category」ずいう語圙の䞋で芋぀けるこずができ、単䞀のタグによっお結合されたヘッダヌのリストは「acronyms and abbreviations」などの語圙の䞋で芋぀けるこずができたす。



次に、蚘事の䞻芁郚分の抜出ず再発行を開始したす。予備段階で取埗されたタグのリストにより、おおよその凊理蚈画の抂芁を瀺し、驚きを最小限に抑えるこずができたした。この凊理は危険な劥協案です。蚘事の構造の䞀郚を予芋しお自信を持っお䜿甚できたすが、他の驚きに察しお安党にプレむするこずしかできたせん。



挿入ず眮換には、メ゜ッドを䜿甚したすinsertAdjacentHTML()



、それはマヌクアップ構造に関しお最も控えめだからです。



したがっお、たずマクロ構造を䜿甚しお、蚘事の倧きなブロックを操䜜したす。ブロック芁玠の間に空の行を挿入し、プロパティinnerText



を芁求した埌、より読みやすいテキストを取埗したす。タグhr



をシンボリック疑䌌行に眮き換えたす。組み蟌みのフレヌムビデオやツむヌトなどを譊告に眮き換え、サむト䞊でそれらに慣れる招埅を行いたす。



次に、構造を少し䞋げたす。匕甚笊は匕甚笊で囲みたす。リストマヌカヌの配眮。ランダムマヌクアップ゚ラヌを修正したすたずえば、蚘事のいずれかの擬䌌タグsmirk



ずflame



匕甚されたコヌドの䞀郚から誀っおマヌクアップに倉わり、衚瀺されたテキストから消えたす。を䜿甚しおペヌゞに远加されるコンテンツをテキストに貌り付けCSS



たすinnerText



。したがっお、プロパティには含たれたせん。



その埌、䞀臎する芁玠をDSLタグでラップし始めたす。



色ずフォントの倪さで芋出しず小芋出しを匷調衚瀺したす。タグ自䜓のプロパティによっお、たたはCSSによっお、ペヌゞ䞊で匷調衚瀺される芁玠を斜䜓ずフォントの倪さで遞択したす。同時に、事前に䜕かを予枬するこずができタグたたはクラスの名前を持぀セレクタヌを䜿甚しおリク゚ストする、その堎で䜕かを芋぀ける必芁がありたすこのために、すべおの芁玠をリク゚ストしたすspan



蚘事内で、蚈算されたスタむルパラメヌタヌを確認し、必芁に応じおタグを远加したす。同時に、盞互に同じフォヌマットタグを耇補しないようにしたすHTMLずは異なり、これはDSLで蚱可されおいたせん-このため、凊理された芁玠を特別な属性でマヌクし、DOMツリヌでその存圚を確認したす。



次のステップ-そしお、すべおの䞊限および䞋限むンデックスをマヌクしたした。



次に、リンクを凊理したした。珟圚のペヌゞぞの自動リンクをそのたた保存したす。サむト内リンクは、DSL圢匏の蟞曞内リンクになりたした。倖郚リンクは、ネットワヌクURLずしお蚭蚈されたした同時に、DSL圢匏なので、リンクの前に読み取り可胜なテキストを保存し、䞋線を匕こうずしたしたネットワヌクアドレスをテキストの埌ろに隠しお、すべおを1぀の党䜓にたずめるこずはできたせん。



たた、画像を倖郚リンクに眮き換えたしたサむト䞊の画像は非垞に倧きいため、蟞曞に埋め蟌みたせんでした-必芁に応じお、ナヌザヌはサむトのアドレスにアクセスできたす。



最埌に、匕甚を匷調するために远加のむンデントを挿入したした぀たり、各新語の䜿甚䟋。



結果は1に2぀であるすべおのマヌキング保存されたHTMLを、そしおその䞭に-マヌキングDSLを、同時にそれらの間の矛盟なし。そしお、プロパティをリク゚ストするずきinnerText



、HTMLに残されおいるのは、DSLタグでラップされた構造化された読み取り可胜なテキストであり、蟞曞コヌドずしお盎接保存する準備ができおいたす。



関数によっお最終凊理を行うこずを忘れずに、ヘッダヌのリストの埌に蟞曞ファむルに曞き蟌みたすsecureHigh



。次に、保存ログずプログラムりィンドりの情報ブロックを曎新し非同期スクリプトによっおペヌゞコンテンツが圢成されるたでの時間に関するデバッグ情報を远加するこずにしたした、次の反埩の前にヘッダヌのリストをクリアし、アドレス配列を確認しお次のペヌゞを芁求するか、サむクル完了。



に぀いお。機胜endSaving()



これは、保存サむクルの終了時、たたはナヌザヌの芁求での゚ラヌの結果ずしお、たたぱラヌの埌に呌び出されたす。その䞭で、ファむル蚘述子を閉じ、入力/出力パス倉数をクリアし、䞍芁になったむベントハンドラヌをキャンセルし、むンタヌフェむス芁玠に初期フォヌムを返したす。終了フラグがオンの堎合、関数の最埌に匷制的にメむンりィンドりを閉じたす。



4.リ゜ヌス



すでに述べたように、NW.jsのプログラムは、ナヌザヌデヌタのシステムフォルダヌに、ブラりザヌのプロファむルフォルダヌに䌌たサブフォルダヌを䜜成したす。特に、同じタむプのペヌゞの読み蟌みを高速化するキャッシュファむルを栌玍するず想定できたす。私の堎合、蟞曞を保存した埌のこのサブフォルダヌは138メガバむトかかりたした。䜜業の最埌に、安党に削陀できたす-次回プログラムが自動的に䜜成するずき最初の起動に時間がかからない堎合。



スクリプトは、蟞曞を1時間半保存し、この間にすべおのリ゜ヌスでほが3侇5千ペヌゞを凊理したしたが、プロセッサヌは倧幅にロヌドしたせんでした。このスクリヌンショットから、メモリ消費量ずプログラムの最埌たでの読み取り/曞き蟌みボリュヌムを芋積もるこずができたす。



蟞曞2016幎2月16日時点のサむトは、rghost.netおよびdrive.google.comで入手できたす。アヌカむブには、UTF-8およびUTF-16で゚ンコヌドされたDSL゜ヌスのほか、ABBYY Lingvoの最新の3぀のバヌゞョン甚にLSDでコンパむルされた蟞曞が含たれおいたす。芋出し5827; カヌド3419; 䜿甚䟋9311。



ご枅聎ありがずうございたした。



All Articles