【スクレイピング】LINEのタイムラインをすべて取得してみる⑧

前回の記事の続きです。

今回は今までの制作過程での変なスクリプトの部分を修正したいと思います。

・配列を整形する際の処理の中で、今年の投稿に「2019」をつける際のやり方が原始的すぎる。
・TLの一番最初の投稿まで行くとエラーが出る。

timeの処理

問題点と解決法

スクレイピングして得られた配列で問題があったのは、今年の投稿と去年の投稿との間に表記のずれがあったことです。
具体的には今年の投稿には「2019」という年号が入っておらず、月日だけの表記になっています。そこでこれまでは、今年の投稿のインデックス番号までループさせて「2019」という文字を追加していましたが、非常に原始的なやり方なので、今回やっと修正しようと思います。
まず思い付いたやり方は、配列の中から正規表現を使って、「20」から始まる要素以外をマッチ、今年の年号を追加というものでした。しかし、どうやら正規表現を使わなくてもその程度のことはできるようです。
それを可能にするのがstartswithメソッドです。このメソッドは引数に文字列を指定することで、その文字から始まる場合はtrue、始まらない場合はfalseを返してくれます。
正直、正規表現が嫌でこの問題を残していたので、めちゃくちゃありがたいメソッドです。
実際に似たような配列を定義して処理してみます。

実際に試してみる

リストの中に辞書が入っている形で5つほど定義してみました。

インデックス番号2と3が今年の投稿です。これに今年の年号を追加します。

このように今年の投稿に「2019」が追加されました。

変更点

これまでこのようにしていましたが、この部分が、
こうなりました。これで21世紀の間は動作するようになります。

ページ最底部でのエラー

現在、navigate関数において自動でページをスクロールさせていますが、jsでページ下部に行くと、古い投稿が10個ずつ読み込まれるようになっています。当然ですが、読み込みに多少のラグがあります。そして、このラグをdriverwaitを使って読み込まれるまで待っています。
これまでこの部分を
として、articleの要素番号で待っていました。(変数nはループの度に10増える)
しかし、これでは投稿数が端数の場合エラーが起きてしまいます。また、この部分をtry文にしてexceptでbreakさせればエラーは出ませんが、端数分の投稿を処理せずにbreakしてしまいます。
そこで、この部分を「全ての要素を表示するまで」という処理にします。
結果として、以下のようなスクリプトになりました。
これによって、全ての要素を表示させ、最後までスクレイピングできるようになりました。

 







コメントを残す

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