Категории

Подпишись
на новые статьи

Просто введи свой e-mail:

Проверка ссылок на наличие товара в каталоге

В интернет-магазинах, в которых часто изменяется ассортимент, иногда возникают ситуации, что реклама, настроенная раннее, может приводить клиентов на отсутствующий товар или каталог, в котором нет сейчас товара. Такие страницы поможет выявить скрипт ниже.

В качестве входных данных для скрипта, написаного на языке R, является файл выгрузки рекламных кампаний из Директ Коммандера, но можно переделать на работу с любым источником. Предварительно файл придется сохранить в кодировке UTF-8, так как по умолчанию он имеет довольно странную кодировку, которую notepad++ определяет как UCS2-LE, т.е. даже не та, в которой работает операционная система. Надеюсь в новом коммандере будет другая кодировка. Средствами R мне пока не удалось перекодировать исходный файл, поэтому делать это мужно перед запуском, в том же notepad++ или в excel.

Скрипт отбирает уникальные url, метки не удаляются, чтобы проверить правильность их обработки сервером.

В качестве входных данных указывается файл с кампаниями, название файла, куда будут записаны результаты. 

Со страниц получаем title, заголовок h1, со страниц каталога подсчитывает количество товара на странице, если товара там нет, проверяем, не явзяется ли эта станица карточкой товара.

Что именно искать на странице указываем при помощи xpath.
Получить его селектор  можно в браузере Chrome просто скопировав его, как на скрине ниже. Для примера берем xpath заколовка товара в каталоге, количество таких заголовков и будет подсчитано, как количетво товара на приземляемой странице.

Результаты проверок сохраняем в таблицу, колонки которой дописываем к исходному файлу директа и сохраняем под новым именем. 

В файле можем обранужить такие неприятности:

Собственно и сам код:

library(rvest)

library(dplyr)

#Входной файл
input <-"direct.csv"

#Выходной файл
output <-"link_output.csv"

#Xpath элемента каталога
catalogItemXpath <- "//h3"

#поля ввода количеста заказываемого товара ( в каталоге такого поля не должно быть)
quantityXpath <- "//*[@id='product_buy_quantity']/@value"

#Читаем csv файл выгрузки кампаний из Директ Коммандера (предворительно нужно конвертировать в UTF-8)
direct_tbl <- read.table(input, stringsAsFactors=F, skip=2, blank.lines.skip=T, header=T, encoding="UTF-8", sep="\t", fill = TRUE)

urls <- direct_tbl$Ссылка

#Создаем таблицу и оставляем уникальные ссылки
tbl <- data.frame(url=unique(urls), title=NA, h1=NA, type=NA, products=NA)
tbl$url <- as.character(tbl$url)totalPage <- length(tbl$url)

#Получаем данные со страниц
for (i in 1:totalPage){
pageType <- "catalog"
tryCatch({
temp <- read_html(tbl$url[i])


#Выбираем title страницы
tbl$title[i]<- gsub("[\r\n\"\t]", "", html_text(html_node(temp, xpath = "//title")))

#Выбираем заголовок H1 страницы
tbl$h1[i]<- gsub("[\r\n\"\t]", "", html_text(html_node(temp, xpath = "//h1")))

#Выбираем узлы товаров в каталоге (в данном случае у товара есть заголовки H3 на странице и больше на странице эти заголовки не используются)
productNodes <- html_nodes(temp, xpath = catalogItemXpath)

#Определяем тип страницы по наличию поля ввода количества товара
tryCatch({
if( html_text(html_node(temp, xpath = quantityXpath) ) =="1") pageType <- "product" },
error = function(war) { pageType <- "catalog"},
warning = function(war) { pageType <- "catalog"}
)

tbl$type[i] <- pageType
tbl$products[i]<- length(productNodes)

}, warning = function(war) {

# warning 
print(paste("WARNING: ",war))
tbl$title[i]<- "WARNING"
tbl$h1[i] <-""
}, error = function(err) {
print(paste("ERROR: ",err))
tbl$title[i]<- "ERROR"
tbl$h1[i] <-""
})

cat(sprintf("Обработано: %i страниц(а) из %i\n", i, totalPage))
}

#Задаем удобочитаемые названия колонок
names(tbl) <-c("Ссылка", "Title Станицы", "Заголовок H1","Тип страницы","Товаров на странице каталога")
temp <- left_join(direct_tbl, tbl, by="Ссылка")

#Созраняем результат в файл
write.csv(temp, file=output )

Это массовая проверка, когда есть подозрение на ошибки в ссылках или каталоге. Но также стоит настроить Google Tag Manager для выявления таких ошибок в режиме online в будующем  и отправки событий в аналитику при их обнаружении. Или запускать проверку скриптом с нужной периодичностью.

Автор: Дата создания:

Комментарии (0)







Разрешённые теги: <b><i><br>Добавить новый комментарий: