プログラミングこんにちわ、タカです。今回は前回に引き続きPythonの『Scrapy』ネタになります。今回はクローリングするurlを動的に設定する方法を紹介します。Scrapyとは、Pythonのクローリング・スクレイピングのフルスタックフレームワークになります。強力で便利なフレームワークになり、冗長的な処理をフレームワーク側がやってくれるので、クローリング・スクレイピング処理に集中することができます。今回のコードはScrapyのバージョン1.4.0をベースにしたものです。前回と同様、まずはScrapyのSpiderクラスのサンプルコードをみていきましょう。h3}上のコードは、Spiderクラスの基本となるようなコードで、これが実際に何をしているのかを簡単に言うと、「example」という名前のSpiderが、「start_urls」に記載されてあるurlをクローリングして、それぞれのページにある「h3」タグのタイトルを取得しています。ここまでは前回の記事と同じになりますが、今回はクローリングするURLを動的に設定してみたいと思います。「start_urls」で設定しているurlを動的に設定するということになります。今回はMySQLからurlを取得するケースを想定してコーディングしたいと思います。クローリングするurlを動的に設定するには、「start_requests」メソッドを使います。ちなみに、上のコードでは「start_requests」メソッドは省略されている形になります。実際にコードを作成していきましょう。上のコードを少しカスタマイズして「start_requests」メソッドを追加します。h3}上のコードでは、まずmysqlを使用するために「MySQLdb」ライブラリと、settings.pyを参照するために「get_project_settings」ライブラリをimportしています。urlは動的で設定するため、「allowed_domains」と「start_urls」は削除しています。つづいて、「start_requests」メソッドにMySqlからデータを取得するコードを追加していきます。h3}上のコードは、「start_requests」メソッドでDBに接続してデータを取得しているのですが、一つずつ見ていきましょう。「get_project_settings」を使って、settings.pyのデータを取得しています。「params」ディクショナリにてDB接続に必要な情報を設定しています。ここでは、settings.pyで設定したデータを参照しています。下のコードはsettings.pyの「MYSQL_HOST」を参照しており、もしsettings.pyに「MYSQL_HOST」データがない場合は、「localhost」を設定するということになります。'localhost')DB接続に必要な情報を設定したら、下記コードで実際にDBに接続しています。self.conn.cursor()DBに接続したら、下記コードでsql文を設定して実行しています。ここでは「urls」というテーブルからurlフィールドを取得すると仮定しています。self.c.fetchall()self.conn.commit()これで、DBからデータを取得することができました。最後に、取得したurlをクローリングするためのコードを追加します。h3}DBから取得したurlデータをfor文でループしてクローリングリクエストをしています。これでダウンロードされたページは「parse」メソッドでパースされるという形になります。補足として「start_requests」メソッドではなく、「__init__」メソッドでも同様のことはできます。以上、PythonのScrapyでクローリングするurlを動的に設定する方法でした。ご参考になれば幸いです。それでは、今回はここまで。プログラミング著者プロフィールTaka東京、奄美大島を拠点にサーフィンとスノーボードが好きなフリーランスのWebクリエイターです。普段はプログラム書いたりデザインしたり映像作ったりしています。いろいろな人の話しを聞くのが好きなので、このブログを通して多くの人と繋がりが出来たら嬉しいです。コメントをキャンセルメールアドレスが公開されることはありません。*次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。拠点にサーフィンとスノーボードが好きなフリーランスのWebクリエイターです。普段はプログラム書いたりデザインしたり映像作ったりしています。nori-life.com。