Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ТАФЯ. Лабораторная работа 4

.docx
Скачиваний:
0
Добавлен:
15.04.2026
Размер:
18.24 Кб
Скачать

МИНИСТЕРСТВО ЦИФРОВОГО РАЗВИТИЯ,

СВЯЗИ И МАССОВЫХ КОММУНИКАЦИЙ РОССИЙСКОЙ ФЕДЕРАЦИИ

Федеральное государственное бюджетное образовательное учреждение высшего образования «Санкт-Петербургский государственный университет

телекоммуникаций им. проф. М. А. Бонч-Бруевича»

(СПбГУТ)

Факультет инфокоммуникационных сетей и систем

Кафедра программной инженерии и вычислительной техники

ЛАБОРАТОРНАЯ РАБОТА №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