ТАФЯ. Лабораторная работа 4
.docxМИНИСТЕРСТВО ЦИФРОВОГО РАЗВИТИЯ,
СВЯЗИ И МАССОВЫХ КОММУНИКАЦИЙ РОССИЙСКОЙ ФЕДЕРАЦИИ
Федеральное государственное бюджетное образовательное учреждение высшего образования «Санкт-Петербургский государственный университет
телекоммуникаций им. проф. М. А. Бонч-Бруевича»
(СПбГУТ)
Факультет инфокоммуникационных сетей и систем
Кафедра программной инженерии и вычислительной техники
ЛАБОРАТОРНАЯ РАБОТА №4
по дисциплине «Теория алгоритмов и формальных языков»
студенты гр. ИКПИ-93 |
_______________ |
Смирнов Д.А. Тюришев М.А. Цыганков М.А. Козлов Н.С. |
|
|
|
ассистент каф. ПИиВТ |
_______________ |
Марочкина А. В. |
Санкт-Петербург
2022
ПОСТАНОВКА ЗАДАЧИ
Написать скрипт, который выполняет поисковой запрос в ЯндексПоиске либо получает на вход название файла с исходным кодом страницы, а на выход выдает все найденные телефонные номера.
ХОД РАБОТЫ
Код разработанной программы на языке Python приведен в таблице 1.
Таблица 1. Код разработанной программы
main.py |
import re import sys import urllib.parse
import requests def query_to_url(query): return urllib.parse.quote(query) def main(query='Телефоны СПбГУТ'): print(f'Запрос "{query}" в Яндекс-Поиске') search_query_url = f"https://yandex.ru/search/?text={query_to_url(query)}" print('URL:', search_query_url) rq = requests.get(search_query_url) text = rq.text regex = re.compile(r'\D((?:8|\+7)[\- ]?)(\(?\d{3}\)?[\- ]?)([\d\- ]{7,10})(,\d{1,6})?\D') if 'captcha' in text: print('Яндекс требует ввод капчи.') print('Попробуйте в следующий раз или введите название файла с кодом страницы: ', end='') filename = input() if 1 <= len(filename) <= 255: with open(filename, 'r') as fp: text = fp.read() else: print(f'Длина имени файла должна быть от 1 до 255') return mobile_numbers = [''.join(x).strip() for x in re.findall(regex, text)] print(*mobile_numbers, sep=', ') if __name__ == "__main__": if len(sys.argv) > 1: try: main(sys.argv[-1]) except Exception as e: print(*e.args, sep=', ') else: print(f'python3.6 main.py <query>') |
Работа программы приведена на рис. 1.
2
Вывод программы представлен в таблице 2.
Таблица 2. Вывод программы
Вывод программы |
Запрос "Телефоны СПбГУТ" в Яндекс-Поиске URL: https://yandex.ru/search/?text=%D0%A2%D0%B5%D0%BB%D0%B5%D1%84%D0%BE%D0%BD%D1%8B%20%D0%A1%D0%9F%D0%B1%D0 %93%D0%A3%D0%A2 +7 (812) 315-01-18, +7 (812) 326-31-50, +7 (481) 238-15-05, +7 (800) 550-41-72, +7 (812) 326-31-63, +7 (800) 550-41-72, +7 (812) 326-31-63, +7 (800) 550-41-72, +7 (800) 550-41-72, +7 (812) 326-31-63, +7 (800) 550-41-72, +7 (812) 326-31-63, +7 (800) 550-41-72, +7 (812) 326-31-63, +7 (812) 305-12-50, +7 (812) 305- 12-50, +7 (812) 305-12-18, +7 (812) 326-31-63, +7 (812) 305-12-18, +7 (812) 326-31-63, +7 (812) 326-31- 50, +7 (812) 326-31-50, +7 (812) 305-12-18, +7 (812) 331-21-49, +7 (812) 305-12-18, +7 (812) 305-12-18, +7 (812) 326-31-63, +7 (812) 326-31-63, +7 (812) 305-12-18, +7 (812) 305-12-18, +7 (812) 305-12-50, +7 (812) 305-12-50, +7 (812) 305-12-45, +7 (812) 305-12-48, +7 (812) 326-31-63, +7 (812) 305-12-51, +7 (812) 305-12-44, +7 (812) 305-12-46 |
Запрос "Телефоны СПбГУТ" в Яндекс-Поиске URL: https://yandex.ru/search/?text=%D0%A2%D0%B5%D0%BB%D0%B5%D1%84%D0%BE%D0%BD%D1%8B%20%D0%A1%D0%9F%D0%B1%D0 %93%D0%A3%D0%A2 Яндекс требует ввод капчи. Попробуйте в следующий раз или введите название файла с кодом страницы: yandex.html +7 (812) 315-01-18, +7 (812) 326-31-50, +7 (481) 238-15-05, +7 (800) 550-41-72, +7 (812) 326-31-63, +7 (800) 550-41-72, +7 (812) 326-31-63, +7 (800) 550-41-72, +7 (800) 550-41-72, +7 (812) 326-31-63, +7 (800) 550-41-72, +7 (812) 326-31-63, +7 (800) 550-41-72, +7 (812) 326-31-63, +7 (812) 305-12-50, +7 (812) 305- 12-50, +7 (812) 305-12-18, +7 (812) 326-31-63, +7 (812) 305-12-18, +7 (812) 326-31-63, +7 (812) 305-12- 18, +7 (812) 305-12-18, +7 (812) 326-31-50, +7 (812) 326-31-50, +7 (812) 305-12-18, +7 (812) 331-21-49, +7 (812) 326-31-63, +7 (812) 326-31-63, +7 (812) 305-12-18, +7 (812) 305-12-18, +7 (812) 305-12-50, +7 (812) 305-12-50, +7 (812) 305-12-45, +7 (812) 326-31-63, +7 (812) 305-12-48, +7 (812) 305-12-51, +7 (812) 305-12-44, +7 (812) 305-12-46 |
ЗАКЛЮЧЕНИЕ
В результате выполнения лабораторной работы мы написали скрипт, который выводит все найденные в коде страницы телефонные номера.
3
