Уважаемые пользователи Голос!
Сайт доступен в режиме «чтение» до сентября 2020 года. Операции с токенами Golos, Cyber можно проводить, используя альтернативные клиенты или через эксплорер Cyberway. Подробности здесь: https://golos.io/@goloscore/operacii-s-tokenami-golos-cyber-1594822432061
С уважением, команда “Голос”
GOLOS
RU
EN
UA
pythono
7 лет назад

Уроки Python 14 // Программа, читающая новости вслух



Сегодня мы напишем программу которая будет парсить заголовки новостей и читать их вслух голосом робота.

Для парсинга мы применим уже известную из прошлого урока библиотеку Beautiful Soup. Её задачей будет получить массив из текстовых заголовков новостей.

Чтобы прочитать вслух полученные заголовки, мы используем модуль Google Text To Speech (gTTS), который через онлайн сервис преобразовывает текстовые строки в mp3 файлы. Чтобы проигрывать полученные mp3 применим модуль pygame, а точнее его подмодуль mixer.

Для начала установим нужные нам модули, дав в командной строке команды:

pip install wheel
pip install gTTS
pip install pygame

Заголовки новостей будем парсить отсюда:

https://m.news.yandex.ru/world.html


Откроем исходный код данной веб страницы и обнаружим, что заголовки лежат в ссылках с родительским классом story__title.



Значит селектор для получения ссылок будет состоять из класса 'story__title' и тега 'a' который обозначает ссылку. Селектор получится таким '.story__title a'

Обратите внимание что ссылок много, и селектор вернет нам не одну переменную а целый список ссылок. Нам лишь останется по очереди получать текст этих ссылок командой getText() и читать его вслух с помощью gTTS.

Как распарсить заголовки новостей разобрались, теперь разберемся с чтением вслух. Во первых нам нужно создать временный mp3 файл, на который мы будем переадресовывать нашу программу после прочтения очередногой новости. Это нужно для того чтобы избежать ошибок с перезаписью файла.

Инициализируем проигрыватель mp3 командой

mixer.init()

Теперь получим тот самый временный mp3 файл, отправив гуглу слово 'пусто' и сохранив ответ как '0.mp3'

tts=gTTS(text='пусто', lang='ru')
tts.save('0.mp3')

Получим в переменную p массив ссылок парсером:

s=requests.get('https://m.news.yandex.ru/world.html')
b=bs4.BeautifulSoup(s.text, "html.parser")
p=b.select('.story__title a')

Ну а теперь, когда у нас есть массив ссылок на заголовки новостей, будем циклично читать их с помощью gTTS, каждый раз сохраняя mp3 в '1.mp3', а после прочтения переадресовывая на временный файл '0.mp3'. Во время чтения будет прерывать работу программы командой:

while mixer.music.get_busy():
    time.sleep(0.1)

Эта команда использует модуль time чтобы создать паузу в работе программы. Вся программа будет выглядеть так:

import requests, bs4, time
from pygame import mixer
from gtts import gTTS

mixer.init()
tts=gTTS(text='пусто', lang='ru')
tts.save('0.mp3')

s=requests.get('https://m.news.yandex.ru/world.html')
b=bs4.BeautifulSoup(s.text, "html.parser")
p=b.select('.story__title a')

for x in p:
    print(x.getText())
    tts=gTTS(text=x.getText(), lang='ru')
    tts.save('1.mp3')
    mixer.music.load('1.mp3')
    mixer.music.play()
    while mixer.music.get_busy():
        time.sleep(0.1)
    mixer.music.stop()
    mixer.music.load('0.mp3')

Программа читает вслух заголовки новостей, немного безжизненным и роботизированным голосом.


Исходники: http://pythono.ru/book/14/news.rar

Не забудьте, что для работы gTTS необходим доступ в интернет с нормальной скоростью.

В этом уроке мы повторили тему парсинга, а также научили нашу программу читать вслух текстовые строки.

Подписывайтесь на мой блог, будет еще много интересного и полезного!

99
53.972 GOLOS
На Golos с August 2017
Комментарии (2)
Сортировать по:
Сначала старые