Web Scraping: проблемы с Set_values ​​и crawlr - PullRequest
0 голосов
/ 25 июня 2018

Моя цель: Используя R, очистите все номера моделей ламп и цены от homedepot. Моя проблема: я не могу найти URL для ВСЕХ страниц лампочки. Я могу очистить одну страницу, но мне нужно найти способ получить URL-адреса, чтобы я мог очистить их все.

В идеале я хотел бы эти страницы https://www.homedepot.com/p/TOGGLED-48-in-T8-16-Watt-Cool-White-Linear-LED-Tube-Light-Bulb-A416-40210/205935901

но даже получить такие страницы списка было бы нормально https://www.homedepot.com/b/Lighting-Light-Bulbs/N-5yc1vZbmbu

Я пытался crawlr -> не работает на homedepot (может быть, потому что https?) Я пытался получить конкретные страницы Я попытался Rvest -> Я пытался использовать html_form и set_values, чтобы поставить лампочку в поле поиска, но форма возвращается

[[1]]
<form> 'headerSearchForm' (GET )
  <input hidden> '': 21
  <input text> '': 
  <button > '<unnamed>

и set_value не будет работать, потому что это '', поэтому ошибка возвращается ошибка: попытка использовать имя переменной нулевой длины.

Я также пытался использовать функцию вставки и lapply

tmp <- lapply(0:696, function(page) {
  url <- paste0("https://www.homedepot.com/b/Lighting-Light-Bulbs/N- 
 5yc1vZbmbu?Nao=", page, "4&Ns=None")
  page <- read_html(url)
  html_table(html_nodes(page, "table"))[[1]]
})

Я получил ошибку: ошибка в html_table (html_nodes (page, "table")) [[1]]: скрипт вышел за пределы.

Я серьезно в растерянности, и любые советы или советы были бы такими фантастическими.

1 Ответ

0 голосов
/ 25 июня 2018

Вы можете сделать это через rvest и tidyverse.

Вы можете найти список всех лампочек, начинающихся на этой странице, с нумерацией страниц по 24 лампочки на страницу на 30 страницах:

https://www.homedepot.com/b/Lighting-Light-Bulbs-LED-Bulbs/N-5yc1vZbm79

Посмотрите на сетку нумерации страниц внизу начальной страницы.Я нарисовал (уродливый) желтый овал вокруг него:

Pagination grid with 30 pages/links

Вы можете извлечь ссылку на каждую страницу с 24 луковицами, следуя / извлекая ссылкив этой сетке нумерации страниц.

Тем не менее, просто сравнивая URL-адреса, становится очевидным, что все страницы следуют шаблону с "https://www.homedepot.com/b/Lighting-Light-Bulbs-LED-Bulbs/N-5yc1vZbm79" в качестве корня и хвостом, где последние цифры цифры представляют первыеотображается лампочка: «? Nao = 24 »

Таким образом, вы можете просто вывести структуру каждого URL, указывающего на отображение лампочек. Следующая команда создает такуюсписок в R:

library(rvest)
library(tidyverse)

index_list <- as.list(seq(0,(24*30), 24)) %>% paste0("https://www.homedepot.com/b/Lighting-Light-Bulbs-LED-Bulbs/N-5yc1vZbm79?Nao=", . )

Теперь, чтобы извлечь url для каждой страницы с лампочкой, было бы полезно сочетание функции и функции карты purrt.

Чтобы извлечь url отдельных лампочексо страниц индекса мы можем вызвать это:

scrap_bulbs <- function(url){
   object <- read_html(as.character(url))
   object <- html_nodes(x = object, xpath = "//a[@data-pod-type='pr']")
   object <- html_attr(x = object, 'href')
   Sys.sleep(10) ## Courtesy pause of 10 seconds, prevents the website from possibly blocking your IP
   paste0('https://www.homedepot.com', object)
}

Теперь мы сохраняем результаты в списке, созданном map ().

bulbs_list <- map(.x = index_list, .f =  scrap_bulbs)
unlist(bulbs_list)

Готово!

...