こんにちは、ましろです。
最近pythonのscrapyとseleniumを使ってスクレイピングをしていて、その際に参考になった記事を載せていきます。
現在の僕のスクレイピングのスキルとしては、
scrapyでのスクレイピング済サイト数15、seleniumでのスクレイピング済サイト数2、正規表現を使ってテキストを探すこともある、って感じです。
ちなみに僕は就活真っ只中でESを書いてる途中にふと思い出してこの記事を書き始めました(いや、ES書けよ)
この記事はPython使用者を想定して書いていますが、他の言語でスクレイピングをしている人にも参考になるのではないかと思います。
初学者のみなさんのスキルアップの一助になれば幸いです。
ちなみにamazonに飛ぶリンクを貼っていますが、ここで得た収益は僕の食費になります。(応援してやろうって方はリンクから買ってください笑)
Pythonのコード規約について編
Pythonでカタカタしていく上で出来れば綺麗なコードを書きたいですよね。
チームで開発するなら、言語を問わずコードを綺麗に書くスキルは必須だと思います。
みんながバラバラの書き方だとすぐに理解しにくいだろうし、見にくいですからね。
↑初心者の意見なので見方が狭い可能性があります。
「他にもこんな意義があるよ」って方は是非コメントで盛り上げてくだされば僕はめちゃんこ嬉しいです。
コードを綺麗に書くために参考になったもの
Qiitaの記事

flake8, pep8をインストールしてコードを綺麗にしましょうって話です。
有名な本

この本はまだ読んでないんですけど、前インターン先の社員さんや現インターン先(2021/3/26時点)の社員さんに良いぞって言われているので読んでみたいです。
読んだらレビュー書いてみたいですね。
Scrapy編
Scrapyとはwebサイトの情報を抽出するためのPythonのフレームワークです。
Scrapyとは約2ヶ月前に出会って約15時間程で1サイトの情報をcsvに書き出して整形出来るまでになりました。
現在に至るまでに参考になったものと過程を紹介します。
Scrapyの強みと弱み
強み
スクレイピングをするためにはサイトをクロールをする必要があります。
Scrapyはクロールするためのライブラリをインストールする必要なく、これ一本でクロールからスクレイピングまで行う事が出来ます。
また、実装の流れが分かりやすくテンプレート化しやすいです。
Scrapyは自動でデバッグもしてくれるので、特にエラー処理をする必要が無いので実装時間短縮に繋がる上初心者にも優しいです。
コマンドラインのオプションでファイルに書き出すこともできるので、その分実装にかける時間を短くすることが出来ます。
弱み
javascriptによってサイト遷移やサイト内情報の表示を管理しているサイトをスクレイピングためには、必要な知識量が増えます。
詳細はこの記事に書いてあるので気になった方は読んでみてください。
Scrapyを使ったプログラムを書くために参考になったもの
エンジニア界隈(機械学習界隈?)で有名なばんくしさんが紹介されていた本

この本の良いところは、Scrapyに関する説明が網羅されているところです。
とりあえずスクレイピングをしてみたいんだーーーって人は第5章、第6章を読めば必要な知識はつくと思います。
この本のデメリットとしては、スクレイピングの対象にしているサイトの情報(クラス名やDOMの構造)が変わっていて、本に載っているソースコードの直打ちではスクレイピングの経験を積めないという点です。
スクレイピングに必要な技術スタックを俯瞰出来ると思うので、このデメリットを差し引いても読むメリットはあると思います。
技術書によってはかなりの言語知識を要求してくるものがありますが、この本においては基本的なPythonの知識があれば読み進められると思います。
事実、僕が読み始めた当時はクラスの概念をしっかりとわかっていない状態でしたが読み進めることが出来ました。
note.nkmk.meというサイト

↑この記事です
scrapyのインストールから実際にスクレイピングするまでをソースコード付きで説明してくださっています。
上で紹介した本を読むのはめんどっちいよ〜って人はこの記事を読むことをおすすめします。
本を読んだ方もこの記事を読むことをおすすめします。
このサイトを読むと、実際にソースコードを作るための実装力がつくと思います。
僕は本読んでからこのサイトをみて実際にスクレイピングを出来るまでになりました。
scrapyのドキュメント
↑このサイトです
このサイトの使い方としては、使うメソッドの詳細を知りたい時やscrapyの挙動について知りたいときに見るくらいが良いんじゃないかと思います。
「初めからこのドキュメントを読んでスクレイピング始めたるわ〜」ってマインドだと挫折する可能性があると個人的に思います。だって書いてること難しいし実装の全体の流れ掴みにくいんだもん。
Selenium編
正直自分でもまだ分かっていない事が多いんですが、現在知っていることをつらつら書きます。
Seleniumとはスクレイピングをするためのフレームワークです。
driverというものを使ってブラウザを操作します。
Seleniumの強みと弱み
Seleniumの強み
Scrapyとは違い、javascriptでサイト遷移やサイト内情報の表示を管理しているサイトでもスクレイピングができるという点です。
Seleniumは複数の言語で使えるので、ノンPythonerではなくても使うことが出来ます。
ページ遷移やブラウザのスクロールなど、ブラウザ操作を行う際にはdriverを用います。
ソースコードを走らせている間はブラウザが勝手に動くので楽しいです。(圧倒的主観)
ちなみに、表示させない状態でプログラムを走らせることもできます。
スクレイピングのためだけでなく、プログラムのデバッグのためにも使われています。
Seleniumの弱み
Scrapyとは違い、自動でデバッグしてくれないのでエラー処理を自身で書く必要があります。
プログラムは完璧でもサーバーとの接続が途切れたりする可能性があるので書いておくに越したことはありません。
デバッグしてくれないということは欲しい情報を全て取れない可能性があるという事でもあります。
また、ファイルへの書き出しのためにはコードを書かなければならないため、必要となる言語知識や実装時間が増えます。
Scrapyを使うメリットが大きいのかもしれませんね。
時々プログラムが中断することがあります。原因はわかりません。
プログラムを走らせてる時かなりメモリ(?)を食うみたいです。めっちゃ重くてパソコンの動作が遅くなります。
レンタルサーバーの安いプランではプログラム終了までに時間がかかる可能性や止まる可能があります。
初心者にとっては要求されるスキルが多いかもしれません。
Seneniumを使ってプログラムを書くために参考になったもの
Qiitaの記事

↑この記事です
題名の通り10分で簡単なSeleniumを使ったプログラムを書けるようになります。
この記事ではQiita記事のスクレイピングを試みていますが、現在ではQiita記事のDOM構造が変わっていて(クラス名が変わっているだけかもしれない)ソースコードの直打ちではエラーが出ます。
プログラムを走らせることは出来ませんが、流れを掴むためには良い記事だと思います。
公式ドキュメント
↑このサイトです
大まかな流れは掴んだものの使うメソッドが分からないって時やメソッドについて知りたいときに参考にしました。
その他
いろんなサイトをぐるぐる巡ってどんなメソッドを使えば良いか見ました。
終わりに
スクレイピングの際に役立つ正規表現の例やコマンドを紹介したかったのですが記事が長くなるので時間が出来たら新しい記事に書いてアップします。
seleniumではかなり手こずったので具体的な使い方の例もあげたいと思います。