シェアありがとうございます!

【Python】Scrapyでクローリングする際のURLを動的に設定する

 こんにちわ、タカです。今日も寒いですね。さて、今回は前回に引き続きPythonの『Scrapy』ネタになります。今回はクローリングするurlを動的に設定する方法を紹介します。

 Scrapyとは、Pythonのクローリング・スクレイピングのフルスタックフレームワークになります。とても強力で便利なフレームワークになり、冗長的な処理をフレームワーク側がやってくれるので、クローリング・スクレイピング処理に集中することができます。

 なお、今回のコードはScrapyのバージョン1.4.0をベースにしたものです。

 さて、前回と同様、まずはScrapyのSpiderクラスのサンプルコードをみていきましょう。

 上のコードは、Spiderクラスの基本となるようなコードで、これが実際に何をしているのかを簡単に言うと、「example」という名前のSpiderが、「start_urls」に記載されてあるurlをクローリングして、それぞれのページにある「h3」タグのタイトルを取得しています。

 ここまでは前回の記事と同じになりますが、今回はクローリングするURLを動的に設定してみたいと思います。上のコードで言えば 「start_urls」で設定しているurlを動的に設定するということになります。なお、今回はMySQLからurlを取得するケースを想定してコーディングしたいと思います。

 クローリングするurlを動的に設定するには、「start_requests」メソッドを使います。ちなみに、上のコードでは「start_requests」メソッドは省略されている形になります。

 では、実際にコードを作成していきましょう。

 まず、上のコードを少しカスタマイズして「start_requests」メソッドを追加します。

 上のコードでは、まずmysqlを使用するために「MySQLdb」ライブラリと、settings.pyを参照するために「get_project_settings」ライブラリをimportしています。

 また、urlは動的で設定するため、「allowed_domains」と「start_urls」は削除しています。

 つづいて、「start_requests」メソッドにMySqlからデータを取得するコードを追加していきます。

 上のコードは、「start_requests」メソッドでDBに接続してデータを取得しているのですが、一つずつ見ていきましょう。

 まず「get_project_settings」を使って、settings.pyのデータを取得しています。そして、「params」ディクショナリにてDB接続に必要な情報を設定しています。ここでは、settings.pyで設定したデータを参照しています。例えば、下のコードはsettings.pyの「MYSQL_HOST」を参照しており、もしsettings.pyに「MYSQL_HOST」データがない場合は、「localhost」を設定するということになります。

 DB接続に必要な情報を設定したら、下記コードで実際にDBに接続しています。

 DBに接続したら、下記コードでsql文を設定して実行しています。ここでは「urls」というテーブルからurlフィールドを取得すると仮定しています。

 これで、DBからデータを取得することができました。

 そして最後に、取得したurlをクローリングするためのコードを追加します。

 DBから取得したurlデータをfor文でループしてクローリングリクエストをしています。これでダウンロードされたページは「parse」メソッドでパースされるという形になります。

 なお、補足として「start_requests」メソッドではなく、「__init__」メソッドでも同様のことはできます。

 以上、PythonのScrapyでクローリングするurlを動的に設定する方法でした。ご参考になれば幸いです。

 それでは、今回はここまで。タカでした。また!

入門 Python 3

オライリージャパン

この記事のまとめ

  • PythonのScrapyでクローリングするurlを動的に設定する
お仕事の依頼はこちら

人気記事

著者プロフィール

Takanori Hashi

東京、奄美大島、宮崎の3拠点生活を目指すフリーランスのWEBエンジニア兼デザイナー。仕事の傍、子育て&趣味に精を出す一児のパパ。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です