はじめに
この度、ココナラでスクレイピングツールを作成する依頼を数件いただきました。
その依頼を通じて今後意識したほうが良いと感じたことを備忘録を兼ねて記事に残します。
なお、この記事では具体的なソースコードは記述していません。ご了承願います。
前提
- Pythonでツールを作成していました。
- 「selenium」「requests + BeautifulSoup4」のいずれかを使用してツールを作成していました。
- 問い合わせがあってから、以下の流れで正式な納品まで進めていました。
- ヒアリング(対象となるWebページ・出力するファイル形式などを質問を通して聞き取る)
- 対応できるか調査
- 見積もり(価格・期間)
- 成約
- 実装
- 納品・リテイクを繰り返す
- 正式な納品(お互い合意の上で)
1. 納期は長めに取っておく
納期は長めに取っておくといいと思います。リテイクや納品時のトラブルに備えるためです。実装そのものは1~2日に終わるものであったとしてもそこからプラス1週間ぐらい取るぐらいがいいかと思います。
2. ツールが納品先で使用できないトラブルに備えておく
実装したツールが納品先では使用できなかったということもあります。特にPythonをexe化して納品したときなどはセキュリティの問題から起こりやすいです。未然に防ぐことができないか、あるいはトラブルが起きたときはどうするか、可能な限り考えておくといいと思います。
ちなみに、exe化にこだわらなければ、Pythonをインストールすることなくツールを納品する手段があります。詳しくは以前に投稿した私の記事が参考になります。
3. エラーハンドリングについて考えておく
ツールを作成するときにエラーは発生しないように実装をしていきたいところではあります。
が、納品先で想定していないエラーが起こったりするものです。
もし、エラーが起きたときでも親切な作りにできないか。エラーハンドリングを考えて実装していけるようになるといいかと思います。
以下がその一例です。
- タイムアウトなどの起こりやすく、かつ原因がはっきりしているエラーではツールが止まらない実装ができないか考える。
- エラーログをファイル出力させることができないか考える。
- ファイルへ出力するツールでは、こまめにファイル書き込みする実装にできないか考える。そうすることでエラーが発生してもリカバリしやすいようにする。
ありとあらゆるケースに対してエラーハンドリングを作り込むのは大変です。だからこそ、どこを重要視するか考える材料として依頼者へヒアリングをしていくのも良いかと思います。「1度に何ページ分のデータを抽出することになるか?」これを知るだけでもエラーハンドリングを考えるヒントになるのではないかと思います。
4. できる限りrequests + BeautifulSoup4で済まないか考える
使用するモジュールについてですが、seleniumで大体のことはカバーできます。ですが、seleniumで実装すると考えないといけないことが多い印象でした。(Webドライバー・読み込み戦略・オプション・・・etc)
そこで「requests + BeautifulSoup4」でできそうかをまずは考えたほうが良さそうです。
「requests + BeautifulSoup4」だけでは難しいページも確かにありますが、一見できなさそうだけど実はできるページもあります。
実際、ツール作成の調査時にこのようなことがありました。
- requestsでhttps通信する。レスポンスを取得する。
- レスポンスから取り出したい要素を確認するが、その要素内にテキストは何もない。
- レスポンスをよく見るとHTMLコンテンツの中にjsonが含まれていて、それを各要素に描画している処理があった。
- そこでjsonから取り出したい値を取得することにした。
こういうように、調べてみると「requests + BeautifulSoup4」でできそうだと分かることもあります。
調査のときに「requests + BeautifulSoup4」でできそうかどうかも合わせて確認するのもいいかと思います。
あとがき
あくまで私が数件頂いた依頼の中で意識したほうが良いと感じたことをまとめました。
それでも参考になったと言っていただける方が1人でもいらっしゃると嬉しい限りです。
以上です。