見出し画像

Yahoo!ニュースから興味のある記事を自動でメール通知するプログラミング解説~スクレイピング~

今回は、Yahoo!ニュースから興味がある記事をスクレイピングして、毎日メール通知するプログラムを作成します。

こんな方におススメ(*´▽`*)
・スクレイピングを試してみたい
・毎朝興味があるニュースが自動で通知されるようにしたい

プログラムの概要

まず、記事の検索対象ページやピックアップ方法は、以下のようにします。

・記事の検索対象は、以下のページの主要タブとします。https://news.yahoo.co.jp/topics/top-picks
・上記ページで、興味がある記事を1日1回毎朝記事を読む想定としたいので、「前日」を検索対象として指定します。
・興味がある記事のピックアップは、指定した文言がタイトルに入っている記事をスクレイピングすることとして、文言の指定は、プログラム内に直接書きます。

スクレイピングしたら、以下をメール通知します。
・日時
・記事タイトル
・記事のURL

実際に以下の画像のようにメールで通知されるイメージです(^^♪

Screenshot_2020-04-15 メール通知

プログラムの全体像を考える

プログラムは主に次の三つの部分に分けて作成します。

1.Yahoo!ニュースからニュース記事をスクレイピング

2.スクレイピングしたデータをGメールで通知

3.1と2のプログラムを毎日定期実行する

Pythonのプログラムコードを書くのは1と2で、3の部分はcronなど別のツールにより実行することになります。

メール通知は、Gメールからの通知にしますが、プログラムを一部変えれば、Gメール以外からも送信可能です。

3の毎日の定期実行は、レンタルサーバーのロリポップを例に今回のプログラムを定期実行する方法を解説します。

また、基本的なスクレイピングについては、サイト内で解説をしており、以下の記事と同様の流れになりますので、参考にしてください。

1.Yahoo!ニュースからニュース記事をスクレイピング

まずは、スクレイピングを行うプログラムです。スクレイピングの基本的な手順で行うことになりますが、順番にプログラムを作成していきましょう。

ライブラリのインポートと実行コードの導入部分

import requests
from bs4 import BeautifulSoup
import pandas
from datetime import date, timedelta
import time

def get_items(url, df, columns):
   return

def main():
   yesterday = date.today() - timedelta(days=1)
   yesterday = yesterday.strftime('%Y%m%d')
   url = "https://news.yahoo.co.jp/topics/top-picks?date=" + yesterday
   columns = ["time", "title", "link"]
   df = pandas.DataFrame(columns=columns)
   results = get_items(url, df, columns)

if __name__ == '__main__':
   main()

まず1行目から5行目で今回使用するライブラリをインポートします。外部ライブラリはrequests、BeautifulSoup、pandasの3つでスクレイピングを行うときの基本的なものです。

その他、日時の計算につかうdatetimeライブラリやプログラムの一時停止に使うtimeライブラリをインポートします。

7,8行目ではYahoo!ニュースのスクレイピング対象のページから欲しい情報(日時、記事タイトル、リンク)を取得する関数get_items()を定義し、引数として取得先URLを格納する変数url、取得データをpandasのデータフレームとして格納する変数df、dfの列を指定する変数columnsを指定します。

10行目以降では、コードの実行部分をmain()関数にまとめています。

取得するURLを指定して、取得したデータを格納する容器(=データフレーム)df及びその列名を規定する変数columnsを作成、それをスクレイピングする関数get_items()に渡すというスクレイピングの基本的な流れです。

取得先のURLについて詳しく見てみましょう。

ここから先は

14,063字 / 1画像

¥ 1,200

期間限定 PayPay支払いすると抽選でお得に!

この記事が気に入ったらサポートをしてみませんか?