#r #web-scraping #rvest
#r #очистка полотна #rvest
Вопрос:
Может быть, это немного необычно, но я хочу отследить конкретную винтовку, которую я заинтересован в покупке. Я знаком с R, поэтому я пошел по этому пути, но я предполагаю, что есть варианты получше.
Что я хочу сделать, так это проверять веб-страницу ежечасно, чтобы узнать, изменилась ли доступность. Если это так, я получаю текстовое сообщение.
Я начал использовать rvest и twilio. Проблема в том, что я не могу понять, как получить все данные, которые мне нужны. На странице есть кнопка «Добавить в корзину», которая не отображается, если товар недоступен с использованием отображения в стиле css: нет.
Я пробовал различные способы перехода к этому конкретному div, Используя имена идентификаторов, классы css, xpath и т. Д., Но Ничего не получалось.
Есть идеи? это форматирование имени div? Или мне нужно вручную копаться в каждом вложенном div?
РЕДАКТИРОВАТЬ: я смог найти правильный xpath для работы. Но, как указано ниже, вы не можете увидеть стиль.
EDIT2 — в разделе «Нет в наличии» отображается текст «Только в избранных магазинах», но я не могу понять, как его изолировать.
#Schedule script to run every hour
library(rvest)
library(twilio)
#vars for sms
Sys.setenv(TWILIO_SID = "xxxxxxxxxxx")
Sys.setenv(TWILIO_TOKEN = "xxxxxxxxxxx")
#example, two url's - one with in stock item, one without
OutStockURL <- read_html("https://www.cabelas.com/shop/en/marlin-1895sbl-lever-action-rifle?searchTerm=1895 sbl")
InStockURL <- read_html("https://www.cabelas.com/shop/en/thompson-center-venture-ii-bolt-action-centerfire-rifle")
#div id that contains information on if product is in stock or not
instockdivid <- "WC_Sku_List_TableContent_3074457345620110138_Price amp;amp; Availability_1_16_grid"
outstockdivid <- "WC_Sku_List_TableContent_24936_Price amp;amp; Availability_1_15_grid"
#inside the div is a button that is either displayed or not based on availability
instockbutton <- 'id="SKU_List_Widget_Add2CartButton_3074457345620110857_table"'
outstockbutton <- 'id="SKU_List_Widget_Add2CartButton_3074457345617539137_table"'
#if item is unavailable, button style is set to display:none - style="display: none;"
test <- InStockURL %>%
html_nodes("div")
#xpath to buttons
test <- InStockURL %>%
html_nodes(xpath = '//*
[@id="SKU_List_Widget_Add2CartButton_3074457345620110857_table"]')
test2 <- OutStockURL %>%
html_nodes(xpath = '//*
[@id="SKU_List_Widget_Add2CartButton_3074457345617539137_table"]')
#not sure where to go from here to see if the button is visible or not
#if button is displayed, send email
tw_send_message(
to = " 15555555555",
from = " 5555555555",
body = paste("Your Item Is Available!")
)
Комментарии:
1. Rvest будет очищать только исходный код HTML веб-страницы. Это не веб-браузер, который может запускать JavaScript и не вычисляет свойства CSS. Скорее всего, интересующие вас значения обновляются скриптами, запущенными на этой странице после ее загрузки. Если вам нужно взаимодействовать с такими динамическими страницами, рассмотрите возможность использования пакета RSelenium вместо этого. Или вам придется перепроектировать веб-сайт, чтобы посмотреть, можете ли вы воспроизвести поведение скриптов каким-либо другим способом (не рекомендуется, поскольку он может быть очень хрупким).
2. @MrFlick Спасибо за ответ, я только что выяснил xpath для кнопок и пытался выяснить, почему они идентичны (не содержат свойства display: none), когда увидел ваше сообщение. Я буду читать о RSelenium!
3. @MrFlick RSelenium выглядит у меня над головой, а также я не уверен, сможет ли он определить, видна ли эта кнопка или нет. Я вижу другой способ определения доступности. Текст «Только в избранных хранилищах» отображается, когда кнопка не видна. Но я не могу понять, как изолировать это, чтобы я мог использовать его для запуска моего sms.