本記事では、何もない状態からCentOSをインストールし、Scrapy環境を構築するところまでを紹介します。
さて、前回の記事で情報収集/分析ツールとしてスクレイパーを作ってみようと決意したものの、何から始めればいいのか、という状態です。
まずは情報収集を進めていくと、PythonのフレームワークであるScrapyを利用することで手軽にクロール&スクレイピングが可能と言うことがわかりました。ゼロから作るのも大変なので、物は試しということで、早速、Scrapy環境を構築してみました。
既存のサーバ上に構築してもよいのですが、本シリーズでは文字通り何もない状態からのスタートして構築していこうと思います。
1.開発&実行環境(サーバ)の調達
何もないところからスタートするので、開発にも運用にも、サーバを調達しなければなりません。ということで、まずは開発/実行環境としてTime4VPSで新規のVPSを調達します。
お試しということで最小限のスペックで良いため月額0.99ユーロ(約130円!)の格安プランで調達しました。(詳細は上記の記事を参照ください。)
続いてOSをインストールします。今回は使い慣れたCentOSを選びました。
これで無事、開発&実行環境であるサーバを調達することが出来ました。
$ cat /etc/redhat-release
CentOS Linux release 7.3.1611 (Core)
2.Pythontoとpipのインストール
VPSの準備ができたところで早速Scrapyを導入していきます。ScrapyはPythonのフレームワークであるため、サーバにPythonがインストールされていることが前提条件となります。
※2017/10/27現在、Python2系と3系のどちらでもサポートされています
Python2系であればOSインストール時にデフォルトで入っている場合が多く今回も、CentOSにデフォルトで入っているPython2.7を使います。
Pythonバージョンの確認
$ python --version
Python 2.7.5
pipのインストール
Pythonではpipというパッケージ管理システムが存在します。Scrapyのパッケージもpip経由でインストールするためpipが導入されていることを確認します。
$ pip
-bash: pip: command not found
案の定、pipは未インストールでしたので、先に進む前にpipをインストールしておきましょう。
3.Scrapyのインストール
無事にPythonとpipの確認が取れたら、pipを使ってScrapyをインストールします。
#失敗(初回)
$ pip install scrapy
(中略)
copying src/twisted/logger/__init__.py -> build/lib.linux-x86_64-2.7/twisted/logger
copying src/twisted/logger/_io.py -> build/lib.linux-x86_64-2.7/twisted/logger
copying src/twisted/logger/_flatten.py -> build/lib.linux-x86_64-2.7/twisted/logger
copying src/twisted/logger/_filter.py -> build/lib.linux-x86_64-2.7/twisted/logger
copying src/twisted/logger/_legacy.py -> build/lib.linux-x86_64-2.7/twisted/logger
copying src/twisted/logger/_json.py -> build/lib.linux-x86_64-2.7/twisted/logger
copying src/twisted/internet/test/fake_CAs/thing2.pem -> build/lib.linux-x86_64-2.7/twisted/internet/test/fake_CAs
running build_ext
building ‘twisted.test.raiser’ extension
creating build/temp.linux-x86_64-2.7
creating build/temp.linux-x86_64-2.7/src
creating build/temp.linux-x86_64-2.7/src/twisted
creating build/temp.linux-x86_64-2.7/src/twisted/test
gcc -pthread -fno-strict-aliasing -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong –param=ssp-buffer-si
ze=4 -grecord-gcc-switches -m64 -mtune=generic -D_GNU_SOURCE -fPIC -fwrapv -DNDEBUG -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions
-fstack-protector-strong –param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -D_GNU_SOURCE -fPIC -fwrapv -fPIC -I/usr/includ
e/python2.7 -c src/twisted/test/raiser.c -o build/temp.linux-x86_64-2.7/src/twisted/test/raiser.o
unable to execute gcc: No such file or directory
error: command ‘gcc’ failed with exit status 1
—————————————-
Command “/bin/python -u -c “import setuptools, tokenize;__file__=’/tmp/pip-build-R_B7cW/Twisted/setup.py’;f=getattr(tokenize, ‘open’, open)(
__file__);code=f.read().replace(‘\r\n’, ‘\n’);f.close();exec(compile(code, __file__, ‘exec’))” install –record /tmp/pip-1rz67o-record/insta
ll-record.txt –single-version-externally-managed –compile” failed with error code 1 in /tmp/pip-build-R_B7cW/Twisted/
gccがインストールされていないので、pipによるインストールが失敗しました。
$ gcc
-bash: gcc: command not found
gccをyumでインストールして、再実行していきます。
#失敗2(再度トライするも失敗)
$ pip install scrapy
creating build/temp.linux-x86_64-2.7/src/twisted/test
gcc -pthread -fno-strict-aliasing -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong –param=ssp-buffer-si
ze=4 -grecord-gcc-switches -m64 -mtune=generic -D_GNU_SOURCE -fPIC -fwrapv -DNDEBUG -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions
-fstack-protector-strong –param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -D_GNU_SOURCE -fPIC -fwrapv -fPIC -I/usr/includ
e/python2.7 -c src/twisted/test/raiser.c -o build/temp.linux-x86_64-2.7/src/twisted/test/raiser.o
src/twisted/test/raiser.c:4:20: fatal error: Python.h: No such file or directory
#include “Python.h”
^
compilation terminated.
error: command ‘gcc’ failed with exit status 1
今度はPython.hが無いと怒られました。。Python.hはpython-devに含まれているので、こちらも追加でインストールしていきます。python-develは、Pythonの開発に必要なヘッダファイルやライブラリファイルなどが含まれている開発用ツールです。
#3度めの正直
$ pip install scrapy
Collecting scrapy
Using cached Scrapy-1.4.0-py2.py3-none-any.whl
Collecting PyDispatcher>=2.0.5 (from scrapy)
Collecting Twisted>=13.1.0 (from scrapy)
Using cached Twisted-17.9.0.tar.bz2
Requirement already satisfied: lxml in /usr/lib64/python2.7/site-packages (from scrapy)
Requirement already satisfied: service-identity in /usr/lib/python2.7/site-packages (from scrapy)
Requirement already satisfied: w3lib>=1.17.0 in /usr/lib/python2.7/site-packages (from scrapy)
Requirement already satisfied: pyOpenSSL in /usr/lib/python2.7/site-packages (from scrapy)
Requirement already satisfied: parsel>=1.1 in /usr/lib/python2.7/site-packages (from scrapy)
Requirement already satisfied: cssselect>=0.9 in /usr/lib/python2.7/site-packages (from scrapy)
Requirement already satisfied: six>=1.5.2 in /usr/lib/python2.7/site-packages (from scrapy)
Requirement already satisfied: queuelib in /usr/lib/python2.7/site-packages (from scrapy)
Requirement already satisfied: zope.interface>=3.6.0 in /usr/lib64/python2.7/site-packages (from Twisted>=13.1.0->scrapy)
Requirement already satisfied: constantly>=15.1 in /usr/lib/python2.7/site-packages (from Twisted>=13.1.0->scrapy)
Requirement already satisfied: incremental>=16.10.1 in /usr/lib/python2.7/site-packages (from Twisted>=13.1.0->scrapy)
Requirement already satisfied: Automat>=0.3.0 in /usr/lib/python2.7/site-packages (from Twisted>=13.1.0->scrapy)
Requirement already satisfied: hyperlink>=17.1.1 in /usr/lib/python2.7/site-packages (from Twisted>=13.1.0->scrapy)
Requirement already satisfied: attrs in /usr/lib/python2.7/site-packages (from service-identity->scrapy)
Requirement already satisfied: pyasn1 in /usr/lib/python2.7/site-packages (from service-identity->scrapy)
Requirement already satisfied: pyasn1-modules in /usr/lib/python2.7/site-packages (from service-identity->scrapy)
Requirement already satisfied: cryptography>=1.9 in /usr/lib64/python2.7/site-packages (from pyOpenSSL->scrapy)
Requirement already satisfied: setuptools in /usr/lib/python2.7/site-packages (from zope.interface>=3.6.0->Twisted>=13.1.0->scrapy)
Requirement already satisfied: cffi>=1.7; platform_python_implementation != “PyPy” in /usr/lib64/python2.7/site-packages (from cryptography>
=1.9->pyOpenSSL->scrapy)
Requirement already satisfied: enum34; python_version < “3” in /usr/lib/python2.7/site-packages (from cryptography>=1.9->pyOpenSSL->scrapy)
Requirement already satisfied: asn1crypto>=0.21.0 in /usr/lib/python2.7/site-packages (from cryptography>=1.9->pyOpenSSL->scrapy)
Requirement already satisfied: idna>=2.1 in /usr/lib/python2.7/site-packages (from cryptography>=1.9->pyOpenSSL->scrapy)
Requirement already satisfied: ipaddress; python_version < “3” in /usr/lib/python2.7/site-packages (from cryptography>=1.9->pyOpenSSL->scrap
y)
Requirement already satisfied: pycparser in /usr/lib/python2.7/site-packages (from cffi>=1.7; platform_python_implementation != “PyPy”->cryp
tography>=1.9->pyOpenSSL->scrapy)
Building wheels for collected packages: Twisted
Running setup.py bdist_wheel for Twisted … done
Stored in directory: /root/.cache/pip/wheels/91/c7/95/0bb4d45bc4ed91375013e9b5f211ac3ebf4138d8858f84abbc
Successfully built Twisted
Installing collected packages: PyDispatcher, Twisted, scrapy
Successfully installed PyDispatcher-2.0.5 Twisted-17.9.0 scrapy-1.4.0
インストール後確認
% scrapy version
Scrapy 1.4.0
これで、無事にScrapyを使う準備が整いました。次回は実際にScrapyのプロジェクトを作成して、Spider(クロール&スクレイピングプログラム)を作成していきたいと思います。
コメントを残す