python前書き多くの場合、WebクロールまたはWebスパイダーと呼ばれるWebスクレイピング、または「プログラムでWebページのコレクションを調べてデータを抽出する」は、Web上のデータを操作するための強力なツールです。Webスクレイパーを使用すると、一連の製品に関するデータをマイニングしたり、大量のテキストや定量データを再生したり、公式APIを使用せずにサイトからデータを取得したり、個人的な好奇心を満たすことができます。このチュートリアルでは、遊び心のあるデータセットを探索しながら、スクレイピングおよびスパイダープロセスの基本について学習します。[BrickSet]を使用します。これは、レゴセットに関する情報を含むコミュニティ運営のサイトです。Webスクレイパーができます。スクレーパーは簡単に拡張できるので、いじくり回して、Webからデータをスクレイピングする独自のプロジェクトの基盤として使用できます。3のローカル開発環境が必要です。3のローカルプログラミング環境]を使用して、必要なすべてを設定します。ステップ1-基本的なスクレーパーの作成スクレイピングは2段階のプロセスです。Webページを体系的に見つけてダウンロードします。それらのWebページを取得し、そこから情報を抽出します。これらの手順は両方とも、多くの言語でさまざまな方法で実装できます。modulesまたはプログラミング言語が提供するライブラリを使用してスクレイパーをゼロから構築できますが、スクレーパーの複雑化に伴う潜在的な頭痛に対処するため。一度に複数のページをクロールできるように、並行性を処理する必要があります。スクレイピングしたデータをCSV、XML、JSONなどのさまざまな形式に変換する方法を理解する必要があります。特定の設定とアクセスパターンを必要とするサイトに対処しなければならない場合があります。これらの問題を処理する既存のライブラリの上にスクレーパーを構築すると、幸運が得られます。このチュートリアルでは、Pythonとhttp://doc.scrapy.org/en/1.1/intro/overview.html[Scrapy]を使用してスクレーパーを構築します。Scrapyは、最も人気があり強力なPythonスクレイピングライブラリの1つです。スクレイピングには「バッテリーを含む」アプローチが必要です。すべてのスクレイパーが必要とする多くの共通機能を処理するため、開発者は毎回車輪を作り直す必要がありません。+」としても知られています)上にあります。PythonパッケージインデックスであるPyPIは、公開されているすべてのPythonソフトウェアのコミュニティ所有のリポジ​​トリです。+`がインストールされているため、次のコマンドでScrapyをインストールできます。[公式インストールドキュメント]をご覧ください。Scrapyをインストールしたら、プロジェクト用の新しいフォルダーを作成しましょう。ターミナルでこれを実行するには、次を実行します。brickset-scraper次に、作成した新しいディレクトリに移動します。`という名前のスクレイパー用の新しいPythonファイルを作成します。このチュートリアルでは、すべてのコードをこのファイルに配置します。+`コマンドを使用してこのファイルを作成できます。touchまたは、テキストエディタまたはグラフィカルファイルマネージャを使用してファイルを作成できます。Scrapyを基盤とする非常に基本的なスクレーパーを作成します。`、Scrapyが提供する基本的なスパイダークラス。このクラスには2つの必須属性があります。+-スパイダーの名前。+-クロールを開始するURLのhttps://www.digitalocean.com/community/tutorials/understanding-lists-in-python-3[list]。1つのURLから始めます。+`ファイルを開き、次のコードを追加して基本的なスパイダーを作成します。['']これを行ごとに分けましょう。+`を使用して、パッケージが提供するクラスを使用できるようにします。`という_subclass_を作成します。サブクラスは、親クラスのより特殊な形式と考えてください。+`サブクラスには、URLをたどり、見つかったページからデータを抽出する方法を定義するメソッドと動作がありますが、検索する場所や検索するデータがわかりません。サブクラス化することで、その情報を提供できます。+」という名前を付けます。最後に、スクレイパーから開始する単一のURLを提供します:http://brickset.com/sets/year-2016。ブラウザでそのURLを開くと、検索結果ページが表示され、LEGOセットを含む多くのページの最初のページが表示されます。それでは、スクレーパーをテストしてみましょう。+`のようなコマンドを実行します。[独自のコマンドラインインターフェイス]が付属しており、スクレーパーの起動プロセスを合理化します。次のコマンドでスクレーパーを起動します。runspider次のようなものが表示されます。(finished)それは大量の出力なので、それを分解しましょう。スクレーパーは、URLからのデータの読み取りを処理するために必要な追加のコンポーネントと拡張機能を初期化し、ロードしました。+`リストで提供したURLを使用し、Webブラウザーと同じようにHTMLを取得しました。`メソッドに渡しましたが、デフォルトでは何もしません。+`メソッドを作成したことがないため、スパイダーは何もせずに終了します。次に、ページからデータを取得します。ステップ2-ページからデータを抽出するページをプルダウンする非常に基本的なプログラムを作成しましたが、まだスクレイピングやスパイダーは行いません。抽出するデータを与えましょう。[スクレイピングするページ]を見ると、次のような構造になっていることがわかります。すべてのページにヘッダーがあります。一致の数、検索対象、サイトのパンくずなど、トップレベルの検索データがいくつかあります。次に、セット自体があり、テーブルまたは順序付きリストのように表示されます。各セットには同様の形式があります。スクレーパーを作成するときは、HTMLファイルのソースを見て、構造に慣れることをお勧めします。そのため、読みやすくするためにいくつかのものを削除しました。</section></body>このページのスクレイピングは、2段階のプロセスです。必要なデータがあるページの部分を探して、各LEGOセットを取得します。次に、各セットについて、HTMLタグからデータを引き出して、必要なデータを取得します。`は、ユーザーが提供する_selectors_に基づいてデータを取得します。セレクターは、ページ上の1つ以上の要素を検索するために使用できるパターンであるため、要素内のデータを操作できます。+`はCSSセレクターまたはhttps://en.wikipedia.org/wiki/XPath[XPath]セレクターのいずれかをサポートします。CSSは簡単なオプションであり、ページ上のすべてのセットを見つけるのに最適なので、ここではCSSセレクターを使用します。`で指定されていることがわかります。response`オブジェクトに渡すだけです。response):このコードは、ページ上のすべてのセットを取得し、それらをループしてデータを抽出します。次に、それらのセットからデータを抽出して、表示できるようにします。+`タグ内に保存されていることがわかります。+`メソッドがあるため、セレクターを渡して子要素を見つけることができます。セットの名前を見つけて表示するには、次のようにコードを変更します。response.css(SET_SELECTOR):このコードでは次の2つのことが行われています。text`を追加します。_pseudo-selector_です。extract_first()+`を呼び出します。これにより、要素のリストではなくhttps://www.digitalocean.com/community/tutorial_series/working-with-strings-in-python-3[string]が得られます。ファイルを保存し、スクレーパーを再度実行します。http://brickset.com/sets/year-2016>...画像、ピース、ミニチュアフィギュア、またはセットに付属する_minifigs_の新しいセレクターを追加して、これを拡張していきましょう。特定のセットのHTMLをもう一度見てみましょう。</div></article>このコードを調べると、いくつかのことがわかります。+」属性に保存されます。各セットの名前を取得したときと同じように、別のCSSセレクターを使用してこの値を取得できます。ピースの数を取得するのは少し難しいです。これを取得するには、CSSセレクターを使用して表現するには複雑すぎるため、XMLを走査するためのクエリ言語であるhttps://en.wikipedia.org/wiki/XPath[XPath]を使用します。セット内のミニフィグの数を取得することは、ピースの数を取得することに似ています。したがって、スクレーパーを変更して、この新しい情報を取得しましょう。}変更を保存して、スクレーパーを再度実行します。runspiderこれで、プログラムの出力に新しいデータが表示されます。http://brickset.com/sets/year-2016>次に、このスクレーパーをリンクをたどるクモに変えましょう。ステップ3-複数のページのクロールその最初のページからデータを正常に抽出しましたが、残りの結果を確認するためにそれを過ぎて進んでいません。スパイダーの目的は、他のページへのリンクを検出してトラバースし、それらのページからデータを取得することです。そのためのHTMLは次のとおりです。私たちがしなければならないのは、スクレーパーにそのリンクが存在する場合はそれに従うように指示することです。コードを次のように変更します。}まず、「次のページ」リンクのセレクターを定義し、最初の一致を抽出して、存在するかどうかを確認します。+」は「このページからHTMLを取得したら、このメソッドに渡します」と言います。解析してデータを抽出し、次のページを見つけることができます。」つまり、次のページに移動したら、次のページへのリンクを探し、そのページで次のページへのリンクを探します。次のページへのリンク。これは、Webスクレイピングの重要な部分です。リンクを見つけてフォローします。この例では、非常に直線的です。最後のページに到達するまで、あるページには次のページへのリンクがありますが、タグへのリンク、その他の検索結果、またはその他の任意のURLをたどることができます。ここで、コードを保存してスパイダーを再度実行すると、セットの最初のページを反復処理するだけで停止しないことがわかります。物事の壮大なスキームでは、それは巨大なデータの塊ではありませんが、スクレイプする新しいページを自動的に見つけるプロセスを知っています。Python固有の強調表示を使用した、このチュートリアルの完成したコードは次のとおりです。)結論このチュートリアルでは、30行未満のコードでWebページからデータを抽出する完全に機能するスパイダーを構築しました。これは素晴らしいスタートですが、このクモでできることはたくさんあります。作成したコードを拡張する方法をいくつか紹介します。データのスクレイピングの練習を行います。+`の部分から推測したように、現在は2016年の結果のみを解析しています-他の結果をどのようにクロールしますか年?ほとんどのセットには小売価格が含まれています。+」でデータを見つけます。ほとんどの結果には、セットまたはそのコンテキストに関するセマンティックデータを指定するタグがあります。単一のセットに複数のタグがある場合、これらをどのようにクロールしますか?これで、考えて実験することができます。[Scrapyの公式ドキュメント]をご覧ください。Webからのデータの操作の詳細については、https://www.digitalocean.com/community/tutorials/how-to-scrape-web-pages-with-beautiful-soup-and-python-3のチュートリアルを参照してください。3でWebページをスクレイピングする方法」]。