Невозможно разбить на страницы все результаты API Bing - PullRequest
0 голосов
/ 21 мая 2018

В настоящее время я использую API веб-поиска Bing v7 для запроса Bing о результатах поиска.Согласно документам API, параметры count и offset используются для разбивки на страницы результатов, общее количество которых определяется в самих результатах значением totalEstimatedMatches.

Как указано ниже в документации:

totalEstimatedMatches: предполагаемое количество веб-страниц, имеющих отношение к запросу.Используйте это число вместе с параметрами запроса count и offset для вывода результатов на страницу.

Кажется, это работает до определенного момента, после которого API просто продолжает возвращать одни и те же результаты снова и снова,независимо от значений count и offset.

В моем конкретном случае totalEstimatedMatches был установлен на 330,000count из 50 (то есть 50 результатов на запрос) результаты начинают повторяться примерно в offset 700, то есть 3,500 приводит к расчетным 330,000.

В игре с фронтом бинганаконец, я заметил похожее поведение, когда количество страниц становится достаточно высоким, например,

Неправильно ли я использую API или это просто какое-то ограничение или ошибка, из-за которой totalEstimatedMatches только что вышел?

Ответы [ 2 ]

0 голосов
/ 08 марта 2019

Технически это не прямой ответ на заданный вопрос.Надеемся, что полезно предоставить способ эффективного разбиения на страницы через API Bing без необходимости использовать возвращаемое значение "totalEstimatedMatches", которое, как объясняется в другом ответе, может вести себя очень непредсказуемо: Вот немного Python:

class ApiWorker(object):
    def __init__(self, q):
        self.q = q
        self.offset = 0
        self.result_hashes = set()
        self.finished = False

    def calc_next_offset(self, resp_urls):
       before_adding = len(self.result_hashes)
       self.result_hashes.update((hash(i) for i in resp_urls)) #<==abuse of set operations.
       after_adding = len(self.result_hashes)
       if after_adding == before_adding: #<==then we either got a bunch of duplicates or we're getting very few results back.
           self.finished = True
       else:
           self.offset += len(new_results)

    def page_through_results(self, *args, **kwargs):
        while not self.finished:
            new_resp_urls = ...<call_logic>...
            self.calc_next_offset(new_resp_urls) 
            ...<save logic>...
        print(f'All unique results for q={self.q} have been obtained.')

This^ прекратит разбиение на страницы, как только будет получен полный ответ дубликатов.

0 голосов
/ 21 мая 2018

totalEstimatedMatches предоставляет общее количество совпадений для этого запроса в Интернете - включая дублированные результаты и почти похожий контент.

Для оптимизации индексации все поисковые системы ограничивают результаты до первых N веб-страниц.Это то, что вы видите.Это поведение одинаково для всех поисковых систем, так как обычно почти все пользователи меняют запрос / выбирают веб-страницу / отказываются в течение 2-3 поисковых страниц.

Короче говоря, это не ошибка / неправильная реализация, а оптимизация индекса, которая ограничивает вас от получения большего количества результатов.Если вам действительно нужно получить больше результатов, вы можете использовать соответствующие поисковые запросы и добавлять уникальные веб-страницы.

...