Kodomo

Пользователь

ДЗ №12

Дедлайн: 21:00 понедельник 22.12.2014.

Требования к оформлению, новое выделено курсивом (и, как обычно, сказываются на оценке только в диапазоне 7~10 баллов):

  • Файл с программой должен называться именно так, как указано в задании
  • Во всех программах должны быть содержательные имена переменных
  • Во всех программах не должно быть строк длиннее 75 символов, а если такие строки возникли, части таких строк нужно выносить в отдельные переменные или функции.
  • Функции должны сопровождаться docstring
  • Если функция обрабатывает данные, к ней должен прилагаться пример doctest.

  • Тело любой функции должно иметь длину не более 10 строк
  • Программа не должна содержать (в разумных пределах) дублирования кода
  • Вне функций должно быть не больше 10 строк кода, кроме объявления констант.
  • В пределах программы порядок строк кода должен быть такой: импорты, константы, объявления функций и классов, блок кода в if __name__ == "__main__"

Краткое содержание занятия:

  1. Создайте в репозитории папку hw12

  2. (10 баллов) Создайте в папке hw12 программу search_suggestions.py, которая спрашивает с помощью input() у пользователя поисковый запрос и выводит на экран (по одному на строку) поисковые подсказки, которые выдаёт какая-нибудь поисковая система в ответ на такой запрос (всплывающие подсказки в поисковой строке).

    1. Выберите поисковую систему, кроме duckduckgo (для которой пример разбирался в классе). Это не обязательно должна быть поисковая система. Годятся яндугль-карты, яндугль-словари, маркет, и вообще любая штука, которая высвечивает такие подсказки. Впишите в табличку, какую поисковую систему вы выбрали. Будет интереснее, если все выберут разные поисковые формы.

    2. Зайдите на заглавную страницу поисковой системы. Наберите в поиске часть запроса. Откройте дебаггер (обычно F12), переключитесь в режим networking (включите его, если он выключен), очистите окно дебаггера (обычно это кнопочка с перечёркнутым нулём)
    3. Наберите одну букву в поисковой строке. При этом в дебаггере должен появиться ровно один запрос.
    4. Скопируйте из запроса: адрес (в хроме это вкладка headers) и ответ (в хроме это вкладка response)
    5. Воспользовавшись urllib.parse.unquote выясните, где в адресе запроса находится начало поискового запроса.

    6. Скорее всего, ответ будет либо в формате json или в формате вызов функции с одним или несколькими аргументами в формате json. С помощью слайсов, регулярных выражений и прочих примитивных операций приведите содержимое ответа к такому виду, чтобы json.loads смог распарсить его. (Подсказва: если ответ пришёл в виде функции с несколькими аргументами, то проще всего преобразовать его в список аргументов функции).

    7. Найдите, где в получившихся данных находится нужный ответ.
    8. Напишите функцию-парсер для результата, которая преобразует его из строкового вида в конечный ответ: список поисковых подсказок.
    9. Проверьте работоспособность этой функции, и, если она работает нормально, сделайте из этого для неё пример в docstring.
    10. Напишите функцию, которая с помощью urllib.parse.quote и str.format создаёт запрос, подобный тому, который вы делали, и с помощью urllib.request.urlopen получает его результат.

    11. Напишите головную функцию программы, которая будет получать от пользователя входную строку, вызывать по очереди эти две функции, и печатать построчно результат.
    12. Напишите блок if __name__ == "__main__", в котором вызовите docttest.testmod() и головную функцию.