Web scraping

Что нужно сделать

Дан несложный пример HTML-страницы: examples.html (код загрузки текста сайта из html файла добавлен в файл main.py)

Изучите код этой страницы и реализуйте программу, которая получает список всех подзаголовков сайта (они заключены в теги h3).

Ожидаемый результат:

['Latest News', 'Useful Links', 'Search', 'Heading 3']

Сделайте так, чтобы программа работала для любого сайта, где есть такие теги.

Дополнительно: найдите любой сайт, у которого в коде есть теги ‘h3’, выполните get-запрос к этому сайту при помощи библиотеки requests и получите аналогичный список всех его подзаголовков (заключенных в теги ‘h3’)

Что оценивается

  • Результат вычислений корректен.
  • Формат вывода соответствует примеру.
  • Решение опирается на использование регулярных выражений и их методов.
  • Переменные, функции и собственные методы классов имеют значащие имена, не abcd.
import re, requests

# В данном случае запрос request.get заменен на загрзку сайта из файла html

with open('examples.html', 'r') as f:
    text = f.read()
    pattern = '<h3>(.+)</h3>'
    result = re.findall(pattern, text)
# По итогу вы так же получаете код сайта в виде одной строки

def scraptitles(url: str) -> list:
    '''Функция сохраняет HTML страницу по заданному URL
    и возвращает список строк совпавших с паттерном'''
    page = requests.get(url)
    with open('page.html', 'wb') as file:
        file.writelines(page)

    with open('page.html', 'r') as file:
        text = file.read()
        pattern = '<h3>(.+)</h3>'
        result = re.findall(pattern, text)
    return result

def main():
    print('Первая часть задания: ')
    print(result)
    print('Вторая часть: ')
    url: str = input('Введите url страницы: ')
    try:
        print(scraptitles(url))
    except:
        print('Что-то сломалось.')

if __name__ == '__main__':
    main()