こんにちは、ひらきちです。
久々にプログラミング(1年ぶりくらい?)で、Webスクレイピングをしてみました。
昔は、Python3のjsonパース機能と、beautifulsoupを使ったりしていたのですが、
めんどくさいなーと思って調べたら、scrapyという素晴らしいライブラリが存在するじゃないですか!
そこで、今日はscrapyを学ぶのに必要な時間、サイトなど諸々まとめておきます。
Scrapyを学ぶのに参考にしたサイト
まず全体を学ぶならこちらがおすすめ。
そして、スクレイピングの中で「HTMLのどの要素を抽出するか」を選ぶために使うのがxpathやCSSセレクタ。今回はxpathを利用。xpathの書き方を学ぶために、以下のサイトを参考にしました。
また、商業向けに提供されているサイトでプログラミングの練習をするのはまずい(DDoSになりかねない)ので、以下の練習用サイトを使うとよさそうです。
学習時間
50分。
MacBookに基本的なターミナル開発環境は揃っている前提で、pip3 installから、スクレイピングがうまくいくまで約50分です。
前提条件
以下の条件を満たしていれば同様に短時間で学べると思います。
- python3を一通り理解している
- HTMLを一通り理解している
- pip3を使ったことがある
注意点
商用サイトをスクレイピングする際には、DDoS(Distributed Denial of Service)にならないように、プログラムを制御する設定が必須。
以下の設定をすると、
- 次のアクセスまで3秒を開ける
- Robots.txtに従って動作する
という振る舞いをするようです。
DOWNLOAD_DELAY = 3
ROBOTSTXT_OBEY = True
あとはお行儀の良いクローリング(Webサイト巡回)をするなら、UserAgentを設定しておいた方が良いかもしれませんね。(ただGoogleがUserAgentを非推奨にした関係で、近い将来、UserAgentがなくなるかもしれませんが)
Next Action
ちょっと副業でデータ抽出とかこれでサクッと楽してできないかなーと狡いことを考えています(笑)
まぁ実際はそんなにうまくいかないと思うんですけどね。
好奇心が満たされたのでOKです。
おまけ:はまった点:
「MacBookのターミナル上でころんとドットの区別がつかなかった」
これはMacOS 12にしてから、Terminalの文字を変えたのが原因。
getメソッドの .get() が ,get() になっていたのが判別しづらいフォントでハマりました。
まぁこれは環境要因なので、Webスクレイピングの学びとはちょっと違うので「おまけ」とさせていただきましたw