社内ポータル徘徊にさようなら!Webスクレイピングで更新自動通知2019-10-18社内ポータル徘徊にさようなら!Webスクレイピングで更新自動通知Pythonこんにちは。当社の社内ポータルサイトはSharePointで作られています。その中でも、新着情報が流れてくる「掲示板」のページは「更新がないか?」1日に1~2回は見に行くようにしています。​ただ、業務や会議がたてこんでいると「掲示板」を見ることを忘れ、重要な情報を見過ごしてしまうことがありました。「ポータルサイトをWebスクレイピングして、更新があったらSlackに通知する」機能を作りました。処理は以下のようになっています。機能の実装にあたって、「SharePointのHTMLを取得できない」という問題の解決に苦労しました。本記事においてはWebスクレイピングに関する説明は省略し、問題解決の一部始終を記します。Pythonのスクレイピングプログラムを作成して、実行したところエラーが発生。何らかの要因でHTMLを取得できていないようでした。原因を調査するために、curlコマンドでHTMLを取得できるか確認してみました。HTTPステータスコードの401(Unauthorized:認証が必要)が返ってきていいます。このままだといくらやってもダメで、認証を通さないとHTMLを取得できないことがわかりました。認証の種類によって実装方法が異なるため、今度は-vオプションをつけて実行します。WWW-Authenticate:という部分にどんな認証をしようしているかが表示されます。結果を確認すると、NTLM認証というプロトコルが使われていることが分かりました。​NTLM認証について調べると、SharePointでは一般にNTMLを使用して認証するそうです。URLと記述する必要があります。200(OK:成功)のステータスコードと、メッセージボディ(HTML)が返ってきました。​NTLM認証を通せばエラーは解消しHTMLを取得できることがこれでやっと分かりました。NTLMで認証することでHTMLが取得できることは分かりましたが、今度はPythonでNTLM認証をする必要があります。​Python3でNTLM認証を通す方法を調べたところ、python-ntlmというライブラリを見つけました。python-ntlm3で追加することができます。print(scraping_runner())これでNTLM認証のサイトでも、スクレイピングできるようになります。最後に、今回の成果物です。[password]のコマンドで1時間おきに実行していて、更新があればSlackに更新が通知されます。WebHookURLが必要です。※「HTMLから必要な項目を抜き出す部分」や「Slackに投稿する文章を作成する部分」は用途に合わせて編集が必要です。結論ちょっとしたアイデアとコーディングで、毎日社内ポータルサイトの更新を探す徘徊がなくなり、大変便利になりました。コマンドで作ってみた話こんにちは。フロントエンドのごましおらぶです。BLOGASKULとLOHACOのエンジニアリングブログ。明日来る技術をお届けします。reserved.スターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。