Данные динамически добавляются через вызов API при прокрутке страницы вниз. Вызов API имеет строку запроса, которая позволяет указать startIndex
(начальная строка) и количество результатов на странице (pageSize
). Максимальное количество результатов на странице составляет 1000. Возвращаемое значение - json, из которого вы можете извлечь всю необходимую информацию, включая общее количество строк; доступ через ключ countRaw
. Таким образом, вы можете сделать запрос на начальные 1000, проанализировать общее количество строк countRaw
и выполнить цикл, настраивая параметр строки startIndex
, пока не получите все результаты.
Вы можете использовать анализатор json, например jsonlite для обработки ответа json.
Пример вызова конечной точки API для первых 1000 результатов:
https://www.bluenile.com/api/public/diamond-search-grid/v2?startIndex=0&pageSize=1000&_=1562612289615&sortDirection=asc&sortColumn=default&shape=RD&hasVisualization=true&isFiltersExpanded=false&astorFilterActive=false&country=USA&language=en-us¤cy=USD&productSet=BN&skus=
library(jsonlite)
url <- 'https://www.bluenile.com/api/public/diamond-search-grid/v2?startIndex=0&pageSize=1000&_=1562612289615&sortDirection=asc&sortColumn=default&shape=RD&hasVisualization=true&isFiltersExpanded=false&astorFilterActive=false&country=USA&language=en-us¤cy=USD&productSet=BN&skus='
r <- jsonlite::fromJSON(url)
print(r$countRaw)
Вы получаете список из 8 элементов от каждого звонка. r$results
- это информационный фрейм, содержащий информацию, представляющую основной интерес.
Часть ответа:
Учитывая указанный результат, я ожидал, что смогу сделать что-то вроде (учитывая мой ограниченный опыт R):
total <- r$countRaw
url2 <- 'https://www.bluenile.com/api/public/diamond-search-grid/v2?startIndex=placeholder&pageSize=1000&_=1562612289615&sortDirection=asc&sortColumn=default&shape=RD&hasVisualization=true&isFiltersExpanded=false&astorFilterActive=false&country=USA&language=en-us¤cy=USD&productSet=BN&skus='
if(total > 1000){
for(i in seq(1000, total + 1, by = 1000)){
newUrl <- gsub("placeholder", i , url2)
newdf <- jsonlite::fromJSON(newUrl)$results
# do something with df e.g. merge
}
}
Однако, похоже, что есть результаты только для первых двух вызовов, то есть начального df
из r$results
, показанного выше, а затем:
url2 <- 'https://www.bluenile.com/api/public/diamond-search-grid/v2?startIndex=1000&pageSize=1000&_=1562612289615&sortDirection=asc&sortColumn=default&shape=RD&hasVisualization=true&isFiltersExpanded=false&astorFilterActive=false&country=USA&language=en-us¤cy=USD&productSet=BN&skus='
r <- jsonlite::fromJSON(url2)
df2 <- r$results
Поиск по странице с помощью селектора css .row дает 1002 результата по сравнению с указанным общим количеством всех бриллиантов; поэтому я думаю, что есть некоторые исследования, связанные с фильтрами.