Как вытащить ссылку на товар со страницы профиля клиента на Amazon - PullRequest
0 голосов
/ 25 сентября 2019

Я пытаюсь получить ссылку на продукт со страницы профиля клиента, используя пакет RVEST R

Я ссылался на различные вопросы о переполнении стека, в том числе здесь ( не удалось прочитать веб-страницу с read_html с помощью rvestпакет от r ), но каждый раз, когда я что-то пробую, я не могу вернуть правильный результат.

Например, на этой странице профиля:

https://www.amazon.com/gp/profile/amzn1.account.AETT6GZORFV55BFNOAVFDIJ75QYQ/ref=cm_cr_dp_d_gw_tr?ie=UTF8

Я хотел бы иметь возможность вернуть эту ссылку с конечной целью извлечь идентификатор продукта:B01A51S9Y2

https://www.amazon.com/Amagabeli-Stainless-Chainmail-Scrubber-Pre-Seasoned/dp/B01A51S9Y2?ref=pf_vv_at_pdctrvw_dp

library(dplyr)
library(rvest)
library(stringr)
library(httr)
library(rvest)

# get url
url='https://www.amazon.com/gp/profile/amzn1.account.AETT6GZORFV55BFNOAVFDIJ75QYQ/ref=cm_cr_dp_d_gw_tr?ie=UTF8'
x <- GET(url, add_headers('user-agent' = 'test'))
page <- read_html(x)

page %>%
  html_nodes("[class='a-link-normal profile-at-product-box-link a-text-normal']") %>%
  html_text()

#I did a test to see if i could even find the href, with no luck

test <- page %>%
  html_nodes("#a-page") %>%
  html_text()

grepl("B01A51S9Y2",test)

Спасибо за подсказку @Qharr по Rselenium.это полезно, но все еще не знаете, как извлечь ссылку или asin.библиотека (RSelenium)

driver <- rsDriver(browser=c("chrome"), port = 4574L, chromever = "77.0.3865.40")
rd <- driver[["client"]]
rd$open()
rd$navigate("https://www.amazon.com/gp/profile/amzn1.account.AETT6GZORFV55BFNOAVFDIJ75QYQ/ref=cm_cr_arp_d_gw_btm?ie=UTF8")
prod <- rd$findElement(using = "css", '.profile-at-product-box-link')
prod$getElementText

Это на самом деле ничего не возвращает

Добавил атрибут get href и смог получить ссылку

prod <- rd$findElements(using = "css selector", '.profile-at-product-box-link')

for (link in 1:length(prod)){
  print(prod[[link]]$getElementAttribute('href'))
}

1 Ответ

1 голос
/ 25 сентября 2019

Эта информация извлекается динамически из запроса POST, который делает страница, которую ваш первоначальный запрос rvest не обрабатывает.Этот последующий запрос возвращает в формате json содержимое, определяющее asins, ссылки на продукты и т. Д. .....

enter image description here

Вы можете найти его на вкладке сетиинструментов разработчика F12 .Нажмите F5 , чтобы обновить страницу, а затем проверить сетевой трафик:

enter image description here

Это не простой запрос POST для имитации, и я быпросто используйте RSelenium, чтобы позволить странице отображаться, а затем используйте селектор css

.profile-at-product-box-link

, чтобы собрать коллекцию webElements, из которой вы можете выполнить цикл и извлечь атрибут href.

...