如何从亚马逊的客户资料页面中提取产品 link

How to pull a product link from customer profile page on Amazon

我正在尝试使用 R 的 RVEST 包从客户资料页面获取产品link

我已经参考了各种关于堆栈溢出的问题,包括此处(),但每次尝试时,我都无法 return 得到正确的结果。

例如在此个人资料页面上:

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

我希望能够 return 这个 link,最终目标是提取产品 ID: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 的提示。这很有用,但仍然不确定如何提取 link 或 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

这真的return没什么

添加了get属性href,可以获取link

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

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

该信息是从页面发出的 POST 请求动态提取的,您的 rvest 初始请求未捕获。此后续请求 returns json 格式管理 asins 的内容、产品链接等.....

您可以在开发工具 F12 的网络选项卡中找到它。按 F5 刷新页面然后检查网络流量:

这不是一个简单的 POST 模仿请求,我只想使用 RSelenium 让页面呈现,然后使用 css 选择器

.profile-at-product-box-link

收集一个 webElements 集合,您可以循环并从中提取 href 属性。