1日1時間、3日で完成!requests_htmlでUNEXTをスクレイピングして配信中の動画一覧を取得

きむら @bokukimura です。
スクレイピングしてunextのページのhtmlを取得することが出来ました。

バンザイ!
ほったらかしでウハウハ生活にちょっとだけ近づいた。

僕はpythonもスクレイピングも、ほとんど未経験なんだけど、結構簡単にいくものですね。

この記事を書いている僕は、本業でAndroidアプリ開発をバリバリこなしているソフトエンジニアです。そのため、ソフト開発経験がないと、この記事に書いてあることがサッパリの可能性はおおいにありますので、その所はご了承ください。。

完全に専門外なので、そんなあっさり出来なかったし、いまだに完全に取り切れない部分があるんですね。
だから、実際に実現するにあたって躓いたことや、残された課題などメモがてら書いていきます。

こういった見地ってのは、自分のためにも残していてた方がいので。。

requests_htmlというライブラリを使用

今回、UNEXTのスクレイピングには、requests_htmlというライブラリを使用しています。

requests_htmlはスクレイピングに必要な複数のライブラリをラッピングしたようなライブラリでして、お手軽にスクレイピングするなら便利な代物らしいので採用しました。

ただやってみて思ったのは、思ったよりも日本語の情報が少ないんです。さらに、自分がやりたいようなことをやっている人がWEBの情報では見つかりませんでした。

そのため仕方なく、requests_htmlのソースコード (https://github.com/psf/requests-html/blob/master/requests_html.py) を読んでトライ&エラーで実装しました。

やりたかったのは、画面のスクロールです。
これだけ書くと、arenderの引数にscrolldown入れるだけじゃないかな?って今だったらわかるんです。

しかし、当初はそこにたどり着かなかったんです。
さらに、たどり着いた後も、以下のエラーが出て迷走してしまいましたね。

どうも、scrolldownの値を大きくし過ぎると発生するようです。
僕の環境だと、10は問題なし、20で起きたり起きなかったり、30以上は絶対発生。って感じです。

スクレイピングしようと思っていたページが「https://video.unext.jp/browse/genre/MNU0000135/MNU0000767」で、配信している国内ドラマ一覧となっていて、スクロールさせると次の候補が表示されるという代物です。

このページに表示される動画の数が1000以上あるので、全部の動画を取得しようとすると、かなりスクロールさせないとダメなのです。

そして、そのスクロールがうまく出来てなかったわけです。

じつは、このエラーに3日以上ハマっていました。
そもそも、この制御でスクロールダウンしているかどうかもわかっていませんでしたから、余計迷走していましたね。

試行錯誤してみましたけど、直接の原因がわかっていないので、スクレイピングは1度で終わらせずに、表示される数が多いページをスクレイピングすることにしようと考えています。