迷走ブログ

迷走している全ての人に役立つ情報を送るブログです

【Python】毎日ニュースサイトを開くのが面倒だったため、Pythonistaで定期的にスクレイピングして通知されることにした話

はじめに

普段は、Feedlyでニュースを自動通知させています。

 

ただ残念ながらFeedlyの場合、課金をしないとスクレイピングができないサイトがあり、地味に困りました。

 

仕方なく毎日ブラウザで複数のニュースサイトを開いていました。

 

正直、面倒……

 

ということで、Pythonistaで自動化することにしました。

 

この記事で得られること

  • ニュースを自動で取得・通知する仕組みの構築方法
  • Pythonistaを使った簡単なスクリプトの解説

 

www.moyo-stray-sheep.work

 

 

 

Pythonistaとは?

今回、Pythonistaを使用していきます。

 

Pythonistaは、iOS専用のPython実行環境であり、スクリプトの作成・実行が簡単なアプリです。

 

簡単なアプリの作成から、なんちゃってデータ分析もできる優秀なアプリです。

 

やはり何と言っても、スマホやタブレットだけでPythonのスクリプトを使って便利なツールを作れる点が魅力的です。

 

ということで今回はこれを使用していきます。

 

Pythonista 3

Pythonista 3

  • omz:software
  • 仕事効率化
  • ¥1,500

 

www.moyo-stray-sheep.work

www.moyo-stray-sheep.work

 

今回の方向性

 

今回の全体像としては以下のとおりです。

 

ニュースサイトから定期的に情報を取得し、必要な記事のタイトルと記事のURLを取得して、スマホに通知することにしました。

 

通知機能の実装

必要なライブラリ

  • requests
  • BeautifulSoup
  • notification

今回使用したライブラリですが、一般的なスクレイピングに使用されるライブラリであるrequestsとBeautifulSoupです。それとPythonista独自のモジュールであるnotificationです。

 

notificationモジュールは、iOSに通知するために使用します。

通知センターに「ニュース」がたまっていくようにしたいと思います。

わざわざ別のファイルに保存して〜などをしてしまうと面倒なので。

今回は、ニュースを保存するところまではしないことにしました。

(ニュースを見直すことまでは想定していません)

コード

GitHubにランディング

 

実際に使ってみた感想

メリット

  • 時間短縮
  • 手間の削減
  • ニュースを強制的にチェックできる

基本的には、作ってよかったかなと思います。

Feedlyに課金するよりかは、久々にPythonの勉強もできましたので、これでよし、と思います。

 

一方で、課題というか、改善点はあります。

いくつかのニュースサイトは、構造が異なるところがあるため、それぞれに特化したプログラムを書くことになりました。

 

微妙にIDを取得した方がよいサイトと、class_を取得した方がよい構造のサイトがあり、困りました。

 

また、勉強不足でURLを相対パスと絶対パスに変更する際の元のURLの工夫が難しかったです。元になるURLを指定するときに、ダブってしまう部分をどう捨てればよいのかわからなかったため、urlとurl2と別々に用意しました。。。

 

定期実行について

定期実行に関しては、最終的には「ショートカット」を使用することにしました。

Pythonのプログラム上でずっと実行し続けるというのは避けたかったためです。

 

ショートカット

ショートカット

  • Apple
  • 仕事効率化
  • 無料

 

ショートカットの設定手順

ショートカットのアプリを開くと、「オートメーション」という項目があります。

 

今回は「オートメーション」を使用します。

 

 

今回は、Pythonのプログラムを定期的に実行したいため、プログラムが自動的に実行する時刻を設定します。

 

 

時刻を設定したら、実行したいPythonプログラムを設定していきます。

 

 

どのPythonのプログラムを実行するのか、指定します。

今回は、2つのプログラム(別々の構成のサイトからスクレイピングしたいため、プログラムを2つ作成しました)をそれぞれ選択しました。

 

 

下記のようにいつ実行するのか、そして、何を実行するのか、選択できていたら準備OKです。

 

 


テストもしっかりとできていました。

おわりに

久々にPythonを触って、かなり文法とかを忘れてしまっていました。

せっかく以前、勉強していたため、定期的にプログラムを書いていきたいと思いました。