Python3のスクレイピングツール作成のときに作った関数

はじめに

今回スクレイピングツールが欲しくて初めてプログラムを作成しました。
基礎文法だけ学んでいたPython3で挑戦しましたが、思っていたよりすんなりできました。
とりあえず個人で使う分には困らないレベルになったので、その際に用意した関数を後から見直せるように書いておきます。
もっといい方法があったりすると思いますが、ご自由にお使いください。
エラー処理やロギングなどまだまだ使いこなせていないので、アドバイスがありましたらコメントにお願いします。

入力関係の関数

Yes,Noの標準入力

if文と組み合わせることが多い

標準入力のチェック有り

今回は正しいURLを入力させる正規表現にて使用しました。

HTTPリクエストとHTML解析

HTTPリクエストを送信してHTMLを取得

後述のrequestsモジュールの方が高速で動くしコード的にもスッキリする。

HTTPリクエストを送信してHTMLを取得-改

前述のHTMLを取得するより高速に動きました。ソースもスッキリしてこっちの方が好きです。
requestsモジュールが必要です。
uaはユーザエージェントを変数にしています。

HTMLを解析

HTMLを正規表現で検索してgroup(数値)で特定の情報を取得します。
正規表現で解析できるので応用が聞きますが、後述の方法でもre.compileと組み合わせて使用できます。

HTMLを解析(改)

上述の正規表現よりもこちらの方が高速で動作しました。
タグを指定して取得しているので、コードから何を取得しているのか分かりやすい。(idだけだと分かりづらいですが。)
replaceは”/”が入るとコマンド実行時に区切り文字になるので、変更しています。

URLパース

今回は”/”間を取得する必要があったので使用しました。他にも?以降など色々知っておくと便利。
なお、アルゴリズムを見直して使用しなくなった模様。

Linux操作

ディレクトリの作成

os標準のmkdirコマンドをPythonで実現します。

特にif文を使わなくてもディレクトリの存在チェックも可能です。

ファイルの削除

処理完了時に不要なファイルを削除する時に使います。

ファイルの行数指定の読み込み

ファイルを行数指定して読み込むことができる。
今回の用途では前回の中断処理を中間ファイルの最終行から読み込む方法で使用した。
最後にキャッシュクリアを忘れないように。
1行づつ読み込む時はreadlineを使う。

便利ツール

プログレスバーを表示させるツール

今回は複数の画像を取得するので、進捗がわかるように導入した。
カウントを表示させるのも有りかもしれないが、プログレスバー1行の方がスマートに見える。

終わりに

今回のツール作成で得た知見を全ては書ききれていません。
f.openみたいな書き方はやめてwith opent(”,’r’) as fみたいな書き方を使うようになったりとか。
PEP8に沿って書くことは意識しましたが、まだまだです。
やはりプログラミングは実際に書いてみないとわからなかったり、アルゴリズムだけでなく細かい書き方や使用するライブラリによっても速度が変わるので勉強しがいがあります。
次はチャットボット作成に着手していますが、命令コマンドを実行して処理をさせることはすぐにできました。
ただ、対話型システムを作りたいので、形態素分析や自然言語処理から学習し直しています。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です