こんばんは。
前回に引き続きPythonでスクレイピング挑戦時のメモ。
今回は実際にコードを作成・実行していく。
※動作環境
macOS High Sierra 10.13.6
プロセッサ 2.7 GHz Intel Core i5
メモリ 8 GB 1867 MHz DDR3
Python 3.6.0 :: Anaconda custom (x86_64)
コマンド実行は「ターミナル」、.py編集は「Xcode」を使用
※参考文献「Python エンジニア ファーストブック」(142ページ以降中心)
以下試行錯誤メモ。
まずはプログラムの雛形(spider)を作成する。
spidersファイルのある階層で実行する必要があるためディレクトリを移動。
cd <プロジェクト名>_scraper
ちなみに「ターミナル」の基本的なコマンドはグーグル検索すればすぐ調べられる。
雛形を作成するには、scrapy genspiderコマンドを使用するだけのようだ。
scrapy genspider <ファイル名> <Webサイトのドメイン>
すると<ファイル名>.py(このファイルを①とする)がspidersファイルに作成される。
①のコードをイジることで、対象Webサイトのスクレイピングが出来るようだ。
まずは①がきちんと動作するかテストをする。
そのために①をXcodeで開くと、コードは以下の通りになっているはず。
# -*- coding: utf-8 -*- import scrapy class <ファイル名>Spider(scrapy.Spider): name = '<ファイル名>' allowed_domains = ['<ドメイン>'] start_urls = ['<WebサイトのURL(大抵はホーム)>'] def parse(self, response): pass
よく分からん笑
今後いじりながら段々分かっていくのだろう。
さて、start_urlsをスクレイピングしたいページのURLに書き換える。
そして上書き保存して、一旦ターミナルに戻る。
①を実行したい場合はscrapy crawlコマンドを使用する。
scrapy crawl <①のファイル名>
これを実行すると何かたくさん出てくる。よく分からん笑
よく見ると英語でScrapy 1.4.0 startedとか書いてある。
まあスクレイピングの詳細ログのようなものだろう。
そして一番大事だと思われるのは、下の部分。
<日付と時刻> [scrapy.core.engine] DEBUG: Crawled (200) <GET http://ドメイン/robots.txt> (referer: None) ['cached'] <日付と時刻> [scrapy.core.engine] DEBUG: Crawled (200) <GET (start_urlsのURL)> (referer: None) ['cached'] <日付と時刻> [scrapy.core.engine] INFO: Closing spider (finished)
robots.txtというのは、Webサイトの取扱説明書的なもの。
アクセスやクロールの可否などの情報が書かれている。
なるほど、まずは取説を確認、その後サイトをクロール(巡回)、そして終了。
もしここで、①が文法的に間違ってたりしたらErrorが出る。
例えばこんな感じ。
line 9 def parse(self, response) ^ SyntaxError: invalid syntax
9行目の指摘箇所が違うということだ。
①のコードの本来あるはずのコロン(:)をわざと消して①を実行するとこうなる。
SyntaxError: invalid syntaxとは文法が間違っているよ、ということ。
Pythonのコードエラーについては、https://qiita.com/soutarrr7/items/84e529d87aa3b3a9adcbに大体載っている。
さて、①が上手く実行できることを確認したら今度は、Webサイトから一つ何かしらの情報を抜き出してみよう。
その辺のコードに関しては、https://note.nkmk.me/python-scrapy-tutorial/が参考になった。
詳しくは次回に譲る。