CentOS環境の python3.6(pyenv環境)で Scrapy を利用してみる

Scrapy を使ってWebページのデータの取得を行なっています。

環境としてはCentOSのpython3.6(pyenv環境)となります。

 

ただ、sqlite-develを入れないと後ほど、以下のエラーが出たのでsqliteをインストールして再度python3.6をインストールしておきます。

 

 

Scrapyのインストール

さて、それでは Scrapy のインストールを行います。

 

Twisted 13.1.0以上が必要のためインストールに失敗しました。

非同期処理のためのフレームワークであるTwistedをインストールしてみます。

 

pipで入らないようなのでソースからのインストールを行います。

 

こちらでTwistedのインストールが完了しました。

再度、Scrapyのインストールを行います。

無事インストールが完了しました。

 

プロジェクトの作成

次にプロジェクトの作成を行います。

ここでは「sample_crawler」というプロジェクトを作成しています。

 

無事作成されました。

プロジェクトの初期ファイルは以下のようになっています。

 

ここで大事になるのは以下の3つです。

spidersフォルダ スクレイピング対象の定義など記載したファイルを置く
items.py スクレイピンした後に取得するデータを定義するクラスファイル
settings.py 動作の設定を決める設定ファイル

 

まず、スクレイピング対象の定義ファイルを以下のコマンドで作成します。

「devcolla」という定義ファイルを作り、「developer-collaboration.com」のサイトを対象にしています。

「sample_crawler/spiders/devcolla.py」というファイルができます。

ファイルを確認してみます。

「start_urls = [‘http://developer-collaboration.com/’]」の行からクロールが始まっており、こちらは複数のサイトを指定することができます。

こちらの取得したHTMLソースがparse()メソッドの第二引数responseに渡されています。

 

また、「items.py」を見てみます。

SampleCrawlerItemという定義が空でなされています。

それではまず、「items.py」を以下のように編集してみます。

「title」と「url」を受け取ります。

 

また、「devcolla.py」は以下のように修正します。

 

「from sample_crawler.items import SampleCrawlerItem」の行で定義クラスを読み込みます。

「for quote in response.css(‘article.post-list’):」の行で「article.post-list」のCSSのタグのデータを取得しています。

「item = SampleCrawlerItem()」の行で定義ファイルのオブジェクトを生成します。

その下の2行で取得する要素を設定しています。

ここでは記事のタイトルとURLをトップページから取得しています。

 

それでは実際に動かしてみます。

以下のコマンドでスクレイピングすることができます。

 

無事、サイトからデータを取得し、クラス定義されたオブジェクトにデータが格納されました。

最初の確認としての使い方は以上になります。