Выполнение текстовых поисковых запросов в синхронном режиме
Сервис Yandex Search API позволяет выполнять текстовый поиск в поисковой базе Яндекса и получать результат поиска в формате XML или HTML в синхронном режиме. Выполнять запросы можно с помощью Yandex Cloud ML SDK, REST API и gRPC API. Поисковая выдача зависит от заданных в запросе параметров.
Перед началом работы
Зарегистрируйтесь в Yandex Cloud и создайте платежный аккаунт:
- Перейдите в консоль управления
, затем войдите в Yandex Cloud или зарегистрируйтесь. - На странице Yandex Cloud Billing
убедитесь, что у вас подключен платежный аккаунт, и он находится в статусеACTIVEилиTRIAL_ACTIVE. Если платежного аккаунта нет, создайте его и привяжите к нему облако.
Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша инфраструктура, на странице облака
Подробнее об облаках и каталогах.
Подготовьте облако к работе
Чтобы воспользоваться примерами:
- Создайте сервисный аккаунт и назначьте ему роль
search-api.webSearch.user. -
Получите и сохраните API-ключ сервисного аккаунта, указав для него область действия
yc.search-api.execute.В примерах используется аутентификация с помощью API-ключа. Yandex Cloud ML SDK также поддерживает аутентификацию с помощью IAM-токена и OAuth-токена. Подробнее см. в разделе Аутентификация в Yandex Cloud ML SDK.
Примечание
Если вы используете ОС Windows
, рекомендуем предварительно установить оболочку WSL и выполнять дальнейшие действия в этой оболочке. -
Установите Python версии 3.10
или выше. -
Установите библиотеку Python venv
для создания изолированных виртуальных окружений в Python. -
Создайте и войдите в новое виртуальное окружение Python:
python3 -m venv new-env source new-env/bin/activate -
С помощью менеджера пакетов pip
установите библиотеку ML SDK:pip install yandex-cloud-ml-sdk
-
Создайте сервисный аккаунт, от имени которого будут выполняться запросы. Вы также можете использовать аккаунт на Яндексе или федеративный аккаунт, но для автоматизации предпочтительнее использовать сервисный аккаунт.
-
Назначьте аккаунту, от имени которого будут выполняться запросы, роль
search-api.webSearch.user. -
Получите IAM-токен, необходимый для аутентификации.
В приведенных примерах используется аутентификация с помощью IAM-токена. Чтобы использовать для аутентификации API-ключ сервисного аккаунта, измените в примерах запросов заголовок
Authorization. Подробнее см. в разделе Аутентификация в API.
Чтобы воспользоваться примерами, также установите утилиты cURL
-
Создайте сервисный аккаунт, от имени которого будут выполняться запросы. Вы также можете использовать аккаунт на Яндексе или федеративный аккаунт, но для автоматизации предпочтительнее использовать сервисный аккаунт.
-
Назначьте аккаунту, от имени которого будут выполняться запросы, роль
search-api.webSearch.user. -
Получите IAM-токен, необходимый для аутентификации.
В приведенных примерах используется аутентификация с помощью IAM-токена. Чтобы использовать для аутентификации API-ключ сервисного аккаунта, измените в примерах запросов заголовок
Authorization. Подробнее см. в разделе Аутентификация в API.
Чтобы воспользоваться примерами, также установите утилиты gRPCurl
Выполните поисковый запрос
Чтобы выполнить поисковый запрос:
-
Создайте файл
web-search-sync.pyи добавьте в него следующий код:#!/usr/bin/env python3 from __future__ import annotations from typing import Literal, cast from yandex_cloud_ml_sdk import YCloudML from yandex_cloud_ml_sdk.search_api import ( FamilyMode, FixTypoMode, GroupMode, Localization, SearchType, SortMode, SortOrder, ) import pathlib USER_AGENT = "Mozilla/5.0 (Linux; Android 13; Pixel 7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.6422.112 Mobile Safari/537.36" def main() -> None: sdk = YCloudML( folder_id="<идентификатор_каталога>", auth="<API-ключ>", ) sdk.setup_default_logging() # you could pass any settings when creating the Search object search = sdk.search_api.web( "RU", family_mode=FamilyMode.MODERATE, # By default object configuration property values are set to None, # which corresponds to the "default" value which is # defined at the service's backend. # e.g. docs_in_group=None, ) # but also you could reconfigure the Search object at any time: search = search.configure( # These are enum-type settings, # they could be passed as strings as shown below. search_type="ru", family_mode="strict", fix_typo_mode="off", group_mode="deep", localization="ru", sort_order="desc", sort_mode="by_time", docs_in_group=None, groups_on_page=6, max_passages=2, region="225", user_agent=USER_AGENT, ) search_query = input("Enter the search query: ") if not search_query.strip(): search_query = "Yandex Cloud" format_ = input("Choose format ([xml]/html): ") format_ = format_.strip() or "xml" assert format_.lower() in ("xml", "html") format_ = cast(Literal["html", "xml"], format_) for page in range(0, 10): search_result = search.run(search_query, format=format_, page=page) output_filename = ( str(pathlib.Path(__file__).parent) + "/" + "page_" + str(page + 1) + "." + format_ ) file = open(output_filename, "a") file.write(search_result.decode("utf-8")) print(f"Page {page} saved to file {output_filename}") file.close() if __name__ == "__main__": main()Где:
-
<идентификатор_каталога>— идентификатор каталога, в котором создан сервисный аккаунт. -
<API-ключ>— API-ключ сервисного аккаунта, полученный ранее и необходимый для аутентификации в API.В примерах используется аутентификация с помощью API-ключа. Yandex Cloud ML SDK также поддерживает аутентификацию с помощью IAM-токена и OAuth-токена. Подробнее см. в разделе Аутентификация в Yandex Cloud ML SDK.
Параметры поиска для объекта класса
sdk.search_api.webвы можете задать в свойствах этого объекта или в свойствах метода.configure:Описание свойств объекта
-
search_type— тип поиска. Возможные значения:ru— для типа поискаРусский.tr— для типа поискаТурецкий.com— для типа поискаМеждународный.kk— для типа поискаКазахский.be– для типа поискаБелорусский.uz— для типа поискаУзбекский.
-
family_mode— фильтрация результатов. Необязательный параметр. Возможные значения:moderate— умеренный фильтр (значение по умолчанию). Из выдачи исключаются документы, относящиеся к категории «для взрослых», если запрос явно не направлен на поиск подобных ресурсов.none— фильтрация отключена. В выдачу включаются любые документы, вне зависимости от содержимого.strict— семейный фильтр. Вне зависимости от поискового запроса из выдачи исключаются документы, относящиеся к категории «для взрослых», а также содержащие ненормативную лексику.
-
fix_typo_mode— значение настройки режима исправления опечаток в поисковом запросе. Необязательный параметр. Возможные значения:on— исправление опечаток включено (значение по умолчанию). Опечатки в тексте поискового запроса автоматически исправляются.off— исправление опечаток отключено. Опечатки в тексте поискового запроса не исправляются, поиск выполняется в полном соответствии с переданным запросом.
-
group_mode— метод группировки результатов. Необязательный параметр. Возможные значения:deep— группировка по доменам. Каждая группа содержит документы одного домена (значение по умолчанию).flat— плоская группировка. Каждая группа содержит один документ.
-
localization— язык уведомлений поискового ответа. Влияет на текст, передаваемый в тегеfound-docs-humanи в сообщениях об ошибках. Необязательный параметр. Возможные значения зависят от выбранного типа поиска:- Тип поиска
Русский:ru— русский язык (значение по умолчанию).be— белорусский язык.kk— казахский язык.uk— украинский язык.
- Тип поиска
Турецкий:tr— турецкий язык.
- Тип поиска
Международный:en— английский язык.
- Тип поиска
-
sort_order— порядок сортировки результатов поиска. Необязательный параметр. Возможные значения:desc— прямой порядок сортировки — от наиболее свежего к наиболее старому (значение по умолчанию).asc— обратный порядок сортировки — от наиболее старого к наиболее свежему.
-
sort_mode— правило сортировки результатов поиска, которое определяет порядок выдачи результатов поиска. Необязательный параметр. Возможные значения:by_relevance— сортировка по релевантности (значение по умолчанию).by_time— сортировка по времени изменения документа.
-
docs_in_group— максимальное количество документов, которые могут быть возвращены в одной группе. Необязательный параметр. Допустимые значения — от1до3. Значение по умолчанию —1. -
groups_on_page— максимальное количество групп, которые могут быть возвращены на одной странице результатов поиска. Необязательный параметр. Значение по умолчанию —20.При получении результата в формате XML допустимые значения — от
1до100, при получении результата в формате HTML — от5до50. -
max_passages— максимальное количество пассажей, которое может быть использовано при формировании сниппета к документу. Необязательный параметр. Допустимые значения — от1до5. По умолчанию для каждого документа возвращается не более четырех пассажей с текстом запроса. -
region— идентификатор страны или региона поиска, который влияет на правила ранжирования документов. Поддерживается только для типов поискаРусскийиТурецкий.Список идентификаторов часто используемых стран и регионов см. в разделе Регионы поиска.
-
user_agent— строка, содержащая заголовок User-Agent . Параметр позволяет получить поисковую выдачу, ориентированную на конкретные устройство и браузер, в том числе мобильную выдачу. Необязательный параметр. Если параметр не задан, сервис возвращает стандартную выдачу по умолчанию.
Список поддерживаемых параметров:
Примечание
Параметр Поддерживается при XML-ответе Поддерживается при HTML-ответе search_typefamily_modefix_typo_modegroup_modelocalizationsort_ordersort_modedocs_in_groupgroups_on_pagemax_passagesregionuser_agent -
-
Выполните созданный файл:
python3 web-search-sync.pyВ процессе выполнения код запросит у вас текст поискового запроса и формат, в котором вы хотите получить ответ.
В результате выполнения код сохранит в текущей директории первые десять страниц с результатами поиска по указанному запросу в заданном формате:
Page 0 saved to file /Users/MyUser/Desktop/page_1.xml ... Page 9 saved to file /Users/MyUser/Desktop/page_10.xml
-
Отправьте запрос и получите результат в кодировке Base64:
-
Создайте файл с телом запроса (например,
body.json):body.json
{ "query": { "searchType": "<тип_поиска>", "queryText": "<текст_поискового_запроса>", "familyMode": "<значение_настройки_фильтрации_результатов>", "page": "<номер_страницы>", "fixTypoMode": "<значение_настройки_режима_исправления_опечаток>" }, "sortSpec": { "sortMode": "<правило_сортировки_результатов>", "sortOrder": "<порядок_сортировки_результатов>" }, "groupSpec": { "groupMode": "<метод_группировки_результатов>", "groupsOnPage": "<количество_групп_на_странице>", "docsInGroup": "<количество_документов_в_группе>" }, "maxPassages": "<максимальное_количество_пассажей>", "region": "<идентификатор_региона>", "l10N": "<язык_уведомлений>", "folderId": "<идентификатор_каталога>", "responseFormat": "<формат_результата>", "userAgent": "<заголовок_User-Agent>" }Описание полей
-
searchType— тип поиска. Возможные значения:SEARCH_TYPE_RU— для типа поискаРусский.SEARCH_TYPE_TR— для типа поискаТурецкий.SEARCH_TYPE_COM— для типа поискаМеждународный.SEARCH_TYPE_KK— для типа поискаКазахский.SEARCH_TYPE_BE– для типа поискаБелорусский.SEARCH_TYPE_UZ— для типа поискаУзбекский.
-
queryText— текст поискового запроса. Максимальная длина запроса — 400 символов. -
familyMode— фильтрация результатов. Необязательный параметр. Возможные значения:FAMILY_MODE_MODERATE— умеренный фильтр (значение по умолчанию). Из выдачи исключаются документы, относящиеся к категории «для взрослых», если запрос явно не направлен на поиск подобных ресурсов.FAMILY_MODE_NONE— фильтрация отключена. В выдачу включаются любые документы вне зависимости от содержимого.FAMILY_MODE_STRICT— семейный фильтр. Вне зависимости от поискового запроса из выдачи исключаются документы, относящиеся к категории «для взрослых», а также содержащие ненормативную лексику.
-
page— номер запрашиваемой страницы. Необязательный параметр. По умолчанию возвращается первая страница поисковой выдачи. Нумерация страниц начинается с нуля (первой странице соответствует значение0). -
fixTypoMode— значение настройки режима исправления опечаток в поисковом запросе. Необязательный параметр. Возможные значения:FIX_TYPO_MODE_ON— исправление опечаток включено (значение по умолчанию). Опечатки в тексте поискового запроса автоматически исправляются.FIX_TYPO_MODE_OFF— исправление опечаток отключено. Опечатки в тексте поискового запроса не исправляются, поиск выполняется в полном соответствии с переданным запросом.
-
sortMode— правило сортировки результатов поиска, которое определяет порядок выдачи результатов поиска. Необязательный параметр. Возможные значения:SORT_MODE_BY_RELEVANCE— сортировка по релевантности (значение по умолчанию).SORT_MODE_BY_TIME— сортировка по времени изменения документа.
-
sortOrder— порядок сортировки результатов поиска. Необязательный параметр. Возможные значения:SORT_ORDER_DESC— прямой порядок сортировки — от наиболее свежего к наиболее старому (значение по умолчанию).SORT_ORDER_ASC— обратный порядок сортировки — от наиболее старого к наиболее свежему.
-
groupMode— метод группировки результатов. Необязательный параметр. Возможные значения:GROUP_MODE_DEEP— группировка по доменам. Каждая группа содержит документы одного домена (значение по умолчанию).GROUP_MODE_FLAT— плоская группировка. Каждая группа содержит один документ.
-
groupsOnPage— максимальное количество групп, которые могут быть возвращены на одной странице результатов поиска. Необязательный параметр. Значение по умолчанию —20.При получении результата в формате XML допустимые значения — от
1до100, при получении результата в формате HTML — от5до50. -
docsInGroup— максимальное количество документов, которые могут быть возвращены в одной группе. Необязательный параметр. Допустимые значения — от1до3. Значение по умолчанию —1. -
maxPassages— максимальное количество пассажей, которое может быть использовано при формировании сниппета к документу. Необязательный параметр. Допустимые значения — от1до5. По умолчанию для каждого документа возвращается не более четырех пассажей с текстом запроса. -
region— идентификатор страны или региона поиска, который влияет на правила ранжирования документов. Поддерживается только для типов поискаРусскийиТурецкий.Список идентификаторов часто используемых стран и регионов см. в разделе Регионы поиска.
-
l10N— язык уведомлений поискового ответа. Влияет на текст, передаваемый в тегеfound-docs-humanи в сообщениях об ошибках. Необязательный параметр. Возможные значения зависят от выбранного типа поиска:- Тип поиска
Русский:LOCALIZATION_RU— русский язык (значение по умолчанию).LOCALIZATION_BE— белорусский язык.LOCALIZATION_KK— казахский язык.LOCALIZATION_UK— украинский язык.
- Тип поиска
Турецкий:LOCALIZATION_TR— турецкий язык.
- Тип поиска
Международный:LOCALIZATION_EN— английский язык.
- Тип поиска
-
folderId— идентификатор каталога пользователя или сервисного аккаунта, от имени которого вы будете выполнять запросы. -
responseFormat— формат получения поисковой выдачи. Необязательный параметр. Возможные значения:FORMAT_XML— результат запроса будет передан в формате XML (значение по умолчанию).FORMAT_HTML— результат запроса будет передан в формате HTML.
-
userAgent— строка, содержащая заголовок User-Agent . Параметр позволяет получить поисковую выдачу, ориентированную на конкретные устройство и браузер, в том числе мобильную выдачу. Необязательный параметр. Если параметр не задан, сервис возвращает стандартную выдачу по умолчанию.
Список поддерживаемых параметров:
Примечание
Параметр Поддерживается при XML-ответе Поддерживается при HTML-ответе searchTypequeryTextfamilyModepagefixTypoModesortModesortOrdergroupModegroupsOnPagedocsInGroupmaxPassagesregionl10NfolderIdresponseFormatuserAgent -
-
Выполните HTTP-запрос, указав полученный ранее IAM-токен:
curl \ --request POST \ --header "Authorization: Bearer <IAM-токен>" \ --data "@body.json" \ "https://searchapi.api.cloud.yandex.net/v2/web/search" \ > result.json
В результате в файл
result.jsonбудет сохранен результат выполнения поискового запроса, содержащий в полеrawDataXML или HTML ответ в кодировке Base64 . -
-
В зависимости от запрошенного формата ответа декодируйте результат из формата
Base64:XMLHTMLecho "$(< result.json)" | \ jq -r .rawData | \ base64 --decode > result.xmlВ результате в файл
result.xmlбудет сохранен XML-ответ по запросу.echo "$(< result.json)" | \ jq -r .rawData | \ base64 --decode > result.htmlВ результате в файл
result.htmlбудет сохранен HTML-ответ по запросу.
-
Отправьте запрос и получите результат в кодировке Base64:
-
Создайте файл с телом запроса (например,
body.json):body.json
{ "query": { "search_type": "<тип_поиска>", "query_text": "<текст_поискового_запроса>", "family_mode": "<значение_настройки_фильтрации_результатов>", "page": "<номер_страницы>", "fix_typo_mode": "<значение_настройки_режима_исправления_опечаток>" }, "sort_spec": { "sort_mode": "<правило_сортировки_результатов>", "sort_order": "<порядок_сортировки_результатов>" }, "group_spec": { "group_mode": "<метод_группировки_результатов>", "groups_on_page": "<количество_групп_на_странице>", "docs_in_group": "<количество_документов_в_группе>" }, "max_passages": "<максимальное_количество_пассажей>", "region": "<идентификатор_региона>", "l10n": "<язык_уведомлений>", "folder_id": "<идентификатор_каталога>", "response_format": "<формат_результата>", "user_agent": "<заголовок_User-Agent>" }Описание полей
-
search_type— тип поиска. Возможные значения:SEARCH_TYPE_RU— для типа поискаРусский.SEARCH_TYPE_TR— для типа поискаТурецкий.SEARCH_TYPE_COM— для типа поискаМеждународный.SEARCH_TYPE_KK— для типа поискаКазахский.SEARCH_TYPE_BE– для типа поискаБелорусский.SEARCH_TYPE_UZ— для типа поискаУзбекский.
-
query_text— текст поискового запроса. Максимальная длина запроса — 400 символов. -
family_mode— фильтрация результатов. Необязательный параметр. Возможные значения:FAMILY_MODE_MODERATE— умеренный фильтр (значение по умолчанию). Из выдачи исключаются документы, относящиеся к категории «для взрослых», если запрос явно не направлен на поиск подобных ресурсов.FAMILY_MODE_NONE— фильтрация отключена. В выдачу включаются любые документы вне зависимости от содержимого.FAMILY_MODE_STRICT— семейный фильтр. Вне зависимости от поискового запроса из выдачи исключаются документы, относящиеся к категории «для взрослых», а также содержащие ненормативную лексику.
-
page— номер запрашиваемой страницы. Необязательный параметр. По умолчанию возвращается первая страница поисковой выдачи. Нумерация страниц начинается с нуля, первой странице соответствует значение0. -
fix_typo_mode— значение настройки режима исправления опечаток в поисковом запросе. Необязательный параметр. Возможные значения:FIX_TYPO_MODE_ON— исправление опечаток включено (значение по умолчанию). Опечатки в тексте поискового запроса автоматически исправляются.FIX_TYPO_MODE_OFF— исправление опечаток отключено. Опечатки в тексте поискового запроса не исправляются, поиск выполняется в полном соответствии с переданным запросом.
-
sort_mode— правило сортировки результатов поиска, которое определяет порядок выдачи результатов поиска. Необязательный параметр. Возможные значения:SORT_MODE_BY_RELEVANCE— сортировка по релевантности (значение по умолчанию).SORT_MODE_BY_TIME— сортировка по времени изменения документа.
-
sort_order— порядок сортировки результатов поиска. Необязательный параметр. Возможные значения:SORT_ORDER_DESC— прямой порядок сортировки — от наиболее свежего к наиболее старому (значение по умолчанию).SORT_ORDER_ASC— обратный порядок сортировки — от наиболее старого к наиболее свежему.
-
group_mode— метод группировки результатов. Необязательный параметр. Возможные значения:GROUP_MODE_DEEP— группировка по доменам. Каждая группа содержит документы одного домена (значение по умолчанию).GROUP_MODE_FLAT— плоская группировка. Каждая группа содержит один документ.
-
groups_on_page— максимальное количество групп, которые могут быть возвращены на одной странице результатов поиска. Необязательный параметр. Значение по умолчанию —20.При получении результата в формате XML допустимые значения — от
1до100, при получении результата в формате HTML — от5до50. -
docs_in_group— максимальное количество документов, которые могут быть возвращены в одной группе. Необязательный параметр. Допустимые значения — от1до3. Значение по умолчанию —1. -
max_passages— максимальное количество пассажей, которое может быть использовано при формировании сниппета к документу. Необязательный параметр. Допустимые значения — от1до5. По умолчанию для каждого документа возвращается не более четырех пассажей с текстом запроса. -
region— идентификатор страны или региона поиска, который влияет на правила ранжирования документов. Поддерживается только для типов поискаРусскийиТурецкий.Список идентификаторов часто используемых стран и регионов см. в разделе Регионы поиска.
-
l10n— язык уведомлений поискового ответа. Влияет на текст, передаваемый в тегеfound-docs-humanи в сообщениях об ошибках. Необязательный параметр. Возможные значения зависят от выбранного типа поиска:- Тип поиска
Русский:LOCALIZATION_RU— русский язык (значение по умолчанию).LOCALIZATION_BE— белорусский язык.LOCALIZATION_KK— казахский язык.LOCALIZATION_UK— украинский язык.
- Тип поиска
Турецкий:LOCALIZATION_TR— турецкий язык.
- Тип поиска
Международный:LOCALIZATION_EN— английский язык.
- Тип поиска
-
folder_id— идентификатор каталога пользователя или сервисного аккаунта, от имени которого вы будете выполнять запросы. -
response_format— формат получения поисковой выдачи. Необязательный параметр. Возможные значения:FORMAT_XML— результат запроса будет передан в формате XML (значение по умолчанию).FORMAT_HTML— результат запроса будет передан в формате HTML.
-
user_agent— строка, содержащая заголовок User-Agent . Параметр позволяет получить поисковую выдачу, ориентированную на конкретные устройство и браузер, в том числе мобильную выдачу. Необязательный параметр. Если параметр не задан, сервис возвращает стандартную выдачу по умолчанию.
Список поддерживаемых параметров:
Примечание
Параметр Поддерживается при XML-ответе Поддерживается при HTML-ответе search_typequery_textfamily_modepagefix_typo_modesort_modesort_ordergroup_modegroups_on_pagedocs_in_groupmax_passagesregionl10nfolder_idresponse_formatuser_agent -
-
Выполните gRPC-вызов, указав полученный ранее IAM-токен:
grpcurl \ -rpc-header "Authorization: Bearer <IAM-токен>" \ -d @ < body.json \ searchapi.api.cloud.yandex.net:443 yandex.cloud.searchapi.v2.WebSearchService/Search \ > result.json
В результате в файл
result.jsonбудет сохранен результат выполнения поискового запроса, содержащий в полеrawDataXML или HTML ответ в кодировке Base64 . -
-
В зависимости от запрошенного формата ответа декодируйте результат из формата
Base64:XMLHTMLecho "$(< result.json)" | \ jq -r .rawData | \ base64 --decode > result.xmlВ результате в файл
result.xmlбудет сохранен XML-ответ по запросу.echo "$(< result.json)" | \ jq -r .rawData | \ base64 --decode > result.htmlВ результате в файл
result.htmlбудет сохранен HTML-ответ по запросу.