システム開発<基本編>Pythonで音声ファイル変換+読み上げ処理 PART:2(Webスクレイピング/RSSフィード)

Python

前回の記事では、Yahoo! ニュースWebスクレイピング処理した後、音声ファイル

変換して、読み上げ処理を行う記事を紹介しました。

今回は、他のニュースサイトについて、Webスクレイピング処理した内容を読み込んだ後、

音声ファイル変換して、読み上げ処理を行う記事を紹介しようと思います。

PythonでWebスクレイピング + 音声ファイル変換 + 読み上げ処理 PART:2

 

音声ファイル変換+読み上げ処理:応用編

今回は、下記の3つニュース Webサイトに対して新着情報を取得後、音声ファイル

変換して、読み上げ処理を行います。

  1. 日本経済新聞 WebサイトWebスクレイピング + 音声ファイル変換読み上げ処理
  2. 読売新聞 WebサイトWebスクレイピング + 音声ファイル変換読み上げ処理
  3. 毎日新聞 WebサイトRSSフィード + 音声ファイル変換読み上げ処理

 

ソース例:日本経済新聞 Webサイト スクレイピング

先ずは、日本経済新聞 Webサイト で Webスクレイピング+音声ファイル変換+読み上げ処理

を行うソースを紹介します。

 

ソース例

Yahoo! ニュース Webスクレイピング+音声ファイル変換+読み上げ処理 したソースを

流用して、日本経済新聞 WebサイトWebスクレイピング+音声ファイル変換+読み上げ処理

するソースを紹介します。

 


import requests
from bs4 import BeautifulSoup

from gtts import gTTS
from pygame import mixer
from datetime import datetime as dt
import time

play_mp3 = "./mp3/nikkei_voice.mp3"

line = "------------------------------------"

date_time = ""


def get_nikkei_news():
    # 日本経済新聞の速報を取得する
    URL = "https://www.nikkei.com/news/category/"

    rest = requests.get(URL)

    # BeautifulSoupに日本経済新聞の新着ニュース内容を読み込ませる
    soup = BeautifulSoup(rest.text, "html.parser")

    # 日本経済新聞の速報の見出しとURLの情報を取得して出力する
    data_list = soup.find_all(class_="fauxBlockLink_ftpicz8", limit=8)


    news_list = "日本経済新聞 headline news です。"

    news_number = "番目のニュースは、    "

    news_space = "です。      "

    i = 0

    print("日本経済新聞 新着ニュース情報")

    print(line)

    for data in data_list:

        news = data.text

        i = i + 1

        print(str(i)  + ":" + news)

        news_list += str(i)        
        news_list += news_number
        news_list += news
        news_list += news_space

    date_time = dt.now().strftime('%Y/%m/%d %H:%M:%S')

    print(line)

    footer(date_time)


    news_end = date_time + "現在の日本経済新聞 headline news でした。"

    news_list += news_end


    tts = gTTS(text=news_list, lang='ja', slow=False) 

    tts.save(play_mp3)

    mixer.init()

    mixer.music.load(play_mp3)

    mixer.music.play()


def header():

    print(line)


def footer(date_time):

    print(date_time + ' Now !')

    print(line)


if __name__ == "__main__":

    try:
        header()

        get_nikkei_news()

    except Exception as e:
        print("Exception: ", e)

    except KeyboardInterrupt:
        pass

 

ソースの解説

では、上記に掲載したソースを解説して行きます。


import requests
from bs4 import BeautifulSoup

from gtts import gTTS
from pygame import mixer
from datetime import datetime as dt
import time

play_mp3 = "./mp3/nikkei_voice.mp3"

こちらは、Webスクレイピング+音声ファイル変換+読み上げ処理を行う為に必要な

ライブラリをインポートしています。

  • Requests:Webページ取得用のライブラリ
  • BeautifulSoup:Webページ(静的)の情報解析、要素抽出用のライブラリ
  • gTTS:Google翻訳ライブラリで、文字列を音声データ(mp3)に変換します
  • pygame:ゲーム開発用ライブラリで、mixer.musicモジュールで、ストリーミング再生
  • datetime, time:日付や時間を扱う為の標準ライブラリ
  • play_mp3:変換した音声データの保存先(環境に合わせて修正して下さい)

 


def get_nikkei_news():
    # 日本経済新聞の速報を取得する
    URL = "https://www.nikkei.com/news/category/"

    rest = requests.get(URL)

    # BeautifulSoupに日本経済新聞の新着ニュース内容を読み込ませる
    soup = BeautifulSoup(rest.text, "html.parser")

    # 日本経済新聞の速報の見出しとURLの情報を取得して出力する
    data_list = soup.find_all(class_="fauxBlockLink_ftpicz8", limit=8)

こちらは、Webスクレイピング処理になります。

  • rest = requests.get(URL)WebページURLを指定して、日本経済新聞 の情報を取得しています。
  • soup = BeautifulSoup() :取得したWebページの情報(HTML)を解析しています。
  • data_list = soup.find_all()日本経済新聞 class_=”fauxBlockLink_ftpicz8″ の解析と8件の要素の抽出(limit=8)しています。

 

日本経済新聞 速報見出しを見てみましょう。

 

日本経済新聞 速報見出しのソースも見てみましょう。

こちらは、class_=”fauxBlockLink_ftpicz8″ の付近の情報になります。

 

実際の日本経済新聞 速報見出しURLの情報は、下記を参照して下さい。

 

 

 


    news_list = "日本経済新聞 headline news です。"

    news_number = "番目のニュースは、    "

    news_space = "です。      "

    i = 0

    print("日本経済新聞 新着ニュース情報")

    print(line)

    for data in data_list:

        news = data.text

        i = i + 1

        print(str(i)  + ":" + news)

        news_list += str(i)        
        news_list += news_number
        news_list += news
        news_list += news_space

    date_time = dt.now().strftime('%Y/%m/%d %H:%M:%S')

    print(line)

    footer(date_time)


    news_end = date_time + "現在の日本経済新聞 headline news でした。"

    news_list += news_end

こちらは、class_=”fauxBlockLink_ftpicz8″ の解析と要素を抽出した情報から、

ループ処理を利用して、1項目毎ニュース内容を取り出しています。

  • news_list = “日本経済新聞 headline news です。”音声データ開始用に、文字列を設定しています。
  • for data in data_list::抽出した 日本経済新聞 “fauxBlockLink_ftpicz8” のデータをループ処理で、1項目毎ニュース内容を取り出しています。
  • news = data.textdata内容を、文字列として取得しています。
  • news_list += str(i)ニュース番号を、文字列に設定しています。
  • news_list += newsニュース内容を、文字列に設定しています。
  • date_time = dt.now().strftime(‘%Y/%m/%d %H:%M:%S’):現在の日時を、フォーマットに合わせて、文字列に設定しています。 例:2025/10/22 09:41:54
  • news_end = date_time + “現在の日本経済新聞 headline news でした。”音声データ終了用に、文字列を設定しています。

 


    tts = gTTS(text=news_list, lang='ja', slow=False) 

    tts.save(play_mp3)

    mixer.init()

    mixer.music.load(play_mp3)

    mixer.music.play()

こちらは、Webスクレイピング処理した内容を読み込んだ 日本経済新聞 と、音声データ

開始用終了用の文字列を音声ファイル変換して、読み上げ処理を行っています。

  • tts = gTTS(text=news_list, lang=’ja’, slow=False):文字列を音声ファイル変換しています。
  • tts.save(play_mp3)変換した音声ファイルを、音声データ(mp3)保存しています。
  • mixer.music.load(play_mp3)保存した音声データ(mp3)を、メモリ上にロードしています。
  • mixer.music.play()ロードした音声データを、ストリーミング再生(読み上げ)を処理しています。

 

実行例

実際に、ソースを起動して、日本経済新聞 Webサイト を Webスクレイピング+音声ファイル変換

+読み上げ処理 を実行してみましょう。

作成したソースの上部のタブメニューより、Run → Run Module を選択するか、

F5キーを押下して、ソースを実行します。

ソースを起動して、エラーが無ければ、IDLE Shell には、日本経済新聞 Webサイト より

Webスクレイピング処理した新着ニュースが表示されます。

 

続いて、Webスクレイピング処理した内容を、音声ファイル変換した後、

読み上げ処理 を行います。

 

ソース例:読売新聞 Webサイト スクレイピング

次に、読売新聞 Webサイト で Webスクレイピング+音声ファイル変換+読み上げ処理

行うソースを紹介します。

 

ソース例

Yahoo! ニュース Webスクレイピング+音声ファイル変換+読み上げ処理 したソースを

流用して、読売新聞 Webサイト を Webスクレイピング+音声ファイル変換+読み上げ処理

するソースを紹介します。

 


import requests
from bs4 import BeautifulSoup

from gtts import gTTS
from pygame import mixer
from datetime import datetime as dt
import time

play_mp3 = "./mp3/yomiuri_voice.mp3"

line = "------------------------------------"

date_time = ""


def get_yomiuri_news():
    # 読売新聞の新着ニュース情報を取得する
    URL = "https://www.yomiuri.co.jp/news/"

    rest = requests.get(URL)

    # BeautifulSoupに読売新聞の新着ニュース内容を読み込ませる
    soup = BeautifulSoup(rest.text, "html.parser")

    # 読売新聞の新着ニュースの見出しとURLの情報を取得して出力する
    data_list = soup.select("div.news-top-latest__list-item__inner > h3", limit=8)

    news_list = "読売新聞 headline news です。"

    news_number = "番目のニュースは、    "

    news_space = "です。      "

    i = 0

    print("読売新聞 新着ニュース情報")

    print(line)

    for data in data_list:

        news = data.text

        i = i + 1

        print(str(i)  + ":" + news)

        news_list += str(i)        
        news_list += news_number
        news_list += news
        news_list += news_space

    date_time = dt.now().strftime('%Y/%m/%d %H:%M:%S')

    print(line)

    footer(date_time)


    news_end = date_time + "現在の読売新聞 headline news でした。"

    news_list += news_end


    tts = gTTS(text=news_list, lang='ja', slow=False) 

    tts.save(play_mp3)

    mixer.init()

    mixer.music.load(play_mp3)

    mixer.music.play()


def header():

    print(line)

def footer(date_time):

    print(date_time + ' Now !')

    print(line)


if __name__ == "__main__":

    try:
        header()

        get_yomiuri_news()

    except Exception as e:
        print("Exception: ", e)

    except KeyboardInterrupt:
        pass

 

 

ソースの解説

では、上記に掲載したソースを解説して行きます。


import requests
from bs4 import BeautifulSoup

from gtts import gTTS
from pygame import mixer
from datetime import datetime as dt
import time

play_mp3 = "./mp3/yomiuri_voice.mp3"

こちらは、Webスクレイピング+音声ファイル変換+読み上げ処理を行う為に必要な

ライブラリをインポートしています。

  • Requests:Webページ取得用のライブラリ
  • BeautifulSoup:Webページ(静的)の情報解析、要素抽出用のライブラリ
  • gTTS:Google翻訳ライブラリで、文字列を音声データ(mp3)に変換します
  • pygame:ゲーム開発用ライブラリで、mixer.musicモジュールで、ストリーミング再生
  • datetime, time:日付や時間を扱う為の標準ライブラリ
  • play_mp3:変換した音声データの保存先(環境に合わせて修正して下さい)

 


def get_yomiuri_news():
    # 読売新聞の新着ニュース情報を取得する
    URL = "https://www.yomiuri.co.jp/news/"

    rest = requests.get(URL)

    # BeautifulSoupに読売新聞の新着ニュース内容を読み込ませる
    soup = BeautifulSoup(rest.text, "html.parser")

    # 読売新聞の新着ニュースの見出しとURLの情報を取得して出力する
    data_list = soup.select("div.news-top-latest__list-item__inner > h3", limit=8)

こちらは、Webスクレイピング処理になります。

  • rest = requests.get(URL)WebページURLを指定して、読売新聞 の情報を取得しています。
  • soup = BeautifulSoup() :取得したWebページの情報(HTML)を解析しています。
  • data_list = soup.select()読売新聞 “div.news-top-latest__list-item__inner > h3” の解析と8件の要素の抽出(limit=8)しています。<h3>タグを解析して抽出しています。

 

読売新聞 Webサイト 見出しを見てみましょう。

 

読売新聞 Webサイト 見出しのソースも見てみましょう。

こちらは、 “div.news-top-latest__list-item__inner > h3” 付近の情報です。

 

実際の 読売新聞 Webサイト 見出しURLの情報は、下記を参照して下さい。

 

 

 


    news_list = "読売新聞 headline news です。"

    news_number = "番目のニュースは、    "

    news_space = "です。      "

    i = 0

    print("読売新聞 新着ニュース情報")
    
    print(line)

    for data in data_list:

        news = data.text

        i = i + 1

        print(str(i)  + ":" + news)

        news_list += str(i)        
        news_list += news_number
        news_list += news
        news_list += news_space


    date_time = dt.now().strftime('%Y/%m/%d %H:%M:%S')

    print(line)

    footer(date_time)


    news_end = date_time + "現在の読売新聞 headline news でした。"

    news_list += news_end

こちらは、“div.news-top-latest__list-item__inner > h3” の解析と要素を抽出した

情報から、ループ処理を利用して、1項目毎ニュース内容を取り出しています。

  • news_list = “読売新聞 headline news です。”音声データ開始用に、文字列を設定しています。
  • for data in data_list::抽出した 読売新聞 “div.news-top-latest__list-item__inner > h3” のデータをループ処理で、1項目毎ニュース内容を取り出しています。
  • news = data.textdata内容を、文字列として取得しています。
  • news_list += str(i)ニュース番号を、文字列に設定しています。
  • news_list += newsニュース内容を、文字列に設定しています。
  • date_time = dt.now().strftime(‘%Y/%m/%d %H:%M:%S’):現在の日時を、フォーマットに合わせて、文字列に設定しています。 例:2025/10/22 09:44:38
  • news_end = date_time + “現在の読売新聞 headline news でした。”音声データ終了用に、文字列を設定しています。

 


    tts = gTTS(text=news_list, lang='ja', slow=False) 

    tts.save(play_mp3)

    mixer.init()

    mixer.music.load(play_mp3)

    mixer.music.play()

こちらは、Webスクレイピング処理した内容を読み込んだ 読売新聞 と、音声データ

開始用終了用の文字列を音声ファイル変換して、読み上げ処理を行っています。

  • tts = gTTS(text=news_list, lang=’ja’, slow=False):文字列を音声ファイル変換しています。
  • tts.save(play_mp3)変換した音声ファイルを、音声データ(mp3)保存しています。
  • mixer.music.load(play_mp3)保存した音声データ(mp3)を、メモリ上にロードしています。
  • mixer.music.play()ロードした音声データを、ストリーミング再生(読み上げ)を処理しています。

 

実行例

実際に、ソースを起動して、読売新聞 Webサイト を Webスクレイピング+音声ファイル変換

+読み上げ処理 を実行してみましょう。

作成したソースの上部のタブメニューより、Run → Run Module を選択するか、

F5キーを押下して、ソースを実行します。

ソースを起動して、エラーが無ければ、IDLE Shell には、読売新聞 Webサイト より

Webスクレイピング処理した新着ニュースが表示されます。

 

続いて、Webスクレイピング処理した内容を、音声ファイル変換した後、

読み上げ処理 を行います。

gTTS (Google Translate’s Text-to-Speech)ライブラリは、とても優秀音声ファイル

変換してくれていますが、多少、読み方間違える事も有ります。

上記のニュースの8番目の内容で、冒頭部分注目して下さい。

  • :富士山入山料 → ふじさん いりやま りょう
  • :富士山入山料 → ふじさん にゅうざん りょう

日本語って難しいですよね!!

これも、愛嬌だと思って、記事の紹介を続けますね。

 

ソース例:毎日新聞 RSS フィード解析

今度は、毎日新聞 Webサイト RSSフィード を利用します。

Webスクレイピング処理と異なり、フィード解析+音声ファイル変換+読み上げ処理を行う

ソースを紹介します。

RSSフィード は、既に古い技術なので利用者が減少しているものの、まだ採用している

Webサイト が有りますので、今回、紹介します。

 

RSS

RSS は、RDF Site Summary/Rich Site Summay/Really Simple Syndicationの略

とも言われ、特定のWebサイトを定期的にチェックする必要なく、更新情報だけを自動的に

受け取れる便利な仕組みです。

XMLを応用したデータ形式の一つで、Webサイト内の新着ページ更新ページタイトル

URL更新日時要約等一覧形式で記述することが出来ます。

RSS に関する詳細は、下記のwikipediaのサイトをご参照下さい。

 

 

feedparserライブラリのインストール

Webスクレイピング処理では、Requests + BeautifulSoup のライブラリを利用しましたが、

RSSフィード を利用する場合は、feedparserライブラリを利用します。

feedparserライブラリは、RSS 1.0/RSS 2.0/Atom の全てのフォーマットに対応しています。

feedparserライブラリの詳細は、下記のサイトを参照して下さい。

 

 

コマンドプロンプト または PowerShell を起動します。

インストール済みのライブラリについては、下記のコマンドで確認が出来ます。

python -m pip list

 

まだ、feedparserライブラリがインストールされていない事が確認出来ました。

では、下記のコマンドで、feedparserライブラリをインストールしてみます。

python -m pip install feedparser

 

インストール時エラーが表示されませんでしたので、問題無くインストールされていると

思いますが、再度、インストール済みのライブラリを確認します。

 

  1. feedparser:Version 6.0.12

上記のライブラリがインストールされている事が、確認出来ました。

 

ソース例

毎日新聞 Webサイト RSSフィード を利用して、フィード解析+音声ファイル変換+

読み上げ処理を行うソースを紹介します。

 


import feedparser

from gtts import gTTS
from pygame import mixer
from datetime import datetime as dt
import time

play_mp3 = "./mp3/mainichi_rss_voice.mp3"

line = "------------------------------------"

date_time = ""


def get_mainichi_rss_news():
    # 毎日新聞サイト RSS Scrape
    fd = feedparser.parse("https://mainichi.jp/rss/etc/mainichi-flash.rss")

    news_list = "毎日新聞 RSS headline news です。"

    news_number = "番目のニュースは、    "

    news_space = "です。      "

    i = 0

    print("毎日新聞 RSS 新着ニュース情報")

    print(line)

    for entry in fd.entries:

        news = entry.title

        i = i + 1

        print(str(i)  + ":" + news)

        news_list += str(i)        
        news_list += news_number
        news_list += news
        news_list += news_space

        if (i > 7):
             break

    date_time = dt.now().strftime('%Y/%m/%d %H:%M:%S')

    print(line)

    footer(date_time)


    news_end = date_time + "現在の毎日新聞 RSS headline news でした。"

    news_list += news_end


    tts = gTTS(text=news_list, lang='ja', slow=False) 

    tts.save(play_mp3)

    mixer.init()

    mixer.music.load(play_mp3)

    mixer.music.play()



def header():

    print(line)


def footer(date_time):

    print(date_time + ' Now !')

    print(line)


if __name__ == "__main__":

    try:
        header()

        get_mainichi_rss_news()

    except Exception as e:
        print("Exception: ", e)

    except KeyboardInterrupt:
        pass

 

ソースの解説

では、上記に掲載したソースを解説して行きます。


import feedparser

from gtts import gTTS
from pygame import mixer
from datetime import datetime as dt
import time

play_mp3 = "./mp3/mainichi_rss_voice.mp3"

こちらは、フィード解析+音声ファイル変換+読み上げ処理を行う為に必要なライブラリを

インポートしています。

  • feedparser:フィード解析用のライブラリ
  • gTTS:Google翻訳ライブラリで、文字列を音声データ(mp3)に変換します
  • pygame:ゲーム開発用ライブラリで、mixer.musicモジュールで、ストリーミング再生
  • datetime, time:日付や時間を扱う為の標準ライブラリ
  • play_mp3:変換した音声データの保存先(環境に合わせて修正して下さい)

 


def get_mainichi_rss_news():
    # 毎日新聞サイト RSS Scrape
    fd = feedparser.parse("https://mainichi.jp/rss/etc/mainichi-flash.rss")

こちらは、RSSフィード解析処理になります。

  • fd = feedparser.parset(URL)WebページURLを指定して、毎日新聞  RSSフィード の情報を取得しています。

 

毎日新聞 Webサイト RSSフィードWebサイトを見てみましょう。

 

実際の 毎日新聞 Webサイト RSSフィードURLの情報は、下記を参照して下さい。

 

 

 


    news_list = "毎日新聞 RSS headline news です。"

    news_number = "番目のニュースは、    "

    news_space = "です。      "

    i = 0

    print("毎日新聞 RSS 新着ニュース情報")

    print(line)

    for entry in fd.entries:

        news = entry.title

        i = i + 1

        print(str(i)  + ":" + news)

        news_list += str(i)        
        news_list += news_number
        news_list += news
        news_list += news_space

        if (i > 7):
             break

    date_time = dt.now().strftime('%Y/%m/%d %H:%M:%S')

    print(line)

    footer(date_time)


    news_end = date_time + "現在の毎日新聞 RSS headline news でした。"

    news_list += news_end

こちらは、RSSフィード解析と要素を抽出した情報から、ループ処理を利用して、

1項目毎ニュース内容を取り出しています。

  • news_list = “毎日新聞 RSS headline news です。”音声データ開始用に、文字列を設定しています。
  • for entry in fd.entries:解析と抽出した 毎日新聞 RSSフィードのデータをループ処理で、1項目毎ニュース内容を取り出しています。
  • news = entry.titleentryタイトルを、文字列として取得しています。
  • news_list += str(i)ニュース番号を、文字列に設定しています。
  • news_list += newsニュース内容を、文字列に設定しています。
  • if (i > 7):取り出したニュース項目が、7件を超えて8件目を取り出したらループ処理終了します。
  • date_time = dt.now().strftime(‘%Y/%m/%d %H:%M:%S’):現在の日時を、フォーマットに合わせて、文字列に設定しています。 例:2025/10/22 09:47:25
  • news_end = date_time + “現在の毎日新聞 RSS headline news でした。”音声データ終了用に、文字列を設定しています。

 


    tts = gTTS(text=news_list, lang='ja', slow=False) 

    tts.save(play_mp3)

    mixer.init()

    mixer.music.load(play_mp3)

    mixer.music.play()

こちらは、RSSフィード解析した内容を読み込んだ 毎日新聞  と、音声データ

開始用終了用の文字列を音声ファイル変換して、読み上げ処理を行っています。

  • tts = gTTS(text=news_list, lang=’ja’, slow=False):文字列を音声ファイル変換しています。
  • tts.save(play_mp3)変換した音声ファイルを、音声データ(mp3)保存しています。
  • mixer.music.load(play_mp3)保存した音声データ(mp3)を、メモリ上にロードしています。
  • mixer.music.play()ロードした音声データを、ストリーミング再生(読み上げ)を処理しています。

 

実行例

実際に、ソースを起動して、毎日新聞 Webサイト RSSフィード を利用して、

フィード解析+音声ファイル変換+読み上げ処理 を実行してみましょう。

作成したソースの上部のタブメニューより、Run → Run Module を選択するか、

F5キーを押下して、ソースを実行します。

ソースを起動して、エラーが無ければ、IDLE Shell には、毎日新聞 Webサイト より

RSSフィード解析処理した新着ニュースが表示されます。

 

続いて、RSSフィード解析処理した内容を、音声ファイル変換した後、

読み上げ処理 を行います。

 

Webスクレイピング/RSSフィード:発展型

今回紹介した3つWebサイトについて、Webスクレイピングフィード解析発展型として、

手作り電光掲示板YouTubeに公開していますので、こちらも紹介しておきます。

  1. 日本経済新聞 WebサイトWebスクレイピング
  2. 読売新聞 WebサイトWebスクレイピング
  3. 毎日新聞 WebサイトRSSフィード

尚、音声ファイル変換読み上げ処理実装していません

 

YouTube:電光掲示板

記事で紹介した日時:2025/10/22 09:47:25 に近い動画です。

【開発環境】

 

まとめ

今回は、下記の3つWebサイトに対して内容を取得後、音声ファイル変換して、

読み上げ処理を紹介しました。

  1. 日本経済新聞 WebサイトWebスクレイピング + 音声ファイル変換読み上げ処理
  2. 読売新聞 WebサイトWebスクレイピング + 音声ファイル変換読み上げ処理
  3. 毎日新聞 WebサイトRSSフィード + 音声ファイル変換読み上げ処理

RSSフィードフィード解析で利用する、feedparserライブラリのインストール

利用方法も紹介しています。

 

次回からは、Pythonから少し離れて、Swiftで開発を行う記事を紹介しようと思います。

 

コメント

タイトルとURLをコピーしました