Сначала объявите все используемые вами пакеты - мне пришлось поискать, чтобы понять, что мне нужны rvest
:
> library(rvest)
> library(dplyr)
Получите свой HTML:
> main.page1 <- read_html(x ="https://www.kickstarter.com/discover/advanced?category_id=1&sort=end_date&seed=2498921&page=1")
В этом случае данные для каждого проекта хранятся в атрибуте data-project
в группе блоков div. Некоторый Javascript (я подозреваю, что построен с использованием инфраструктуры React) в браузере обычно заполняет другие DIV и получает изображения, форматирует ссылки и т. Д. Но вы только что захватили необработанный HTML, так что он недоступен. Но необработанные данные .... Итак ....
Соответствующие блоки div выглядят как класс "react-disc-landing", поэтому он получает данные в виде текстовых строк:
> data = main.page1 %>%
html_nodes("div.react-disc-landing") %>%
html_attr("data-project")
Эти вещи выглядят как строки JSON:
> substr(data[[1]],1,80)
[1] "{\"id\":208460273,\"photo\":{\"key\":\"assets/017/007/465/9b725fdf5ba1ee63e8987e26a1d33"
Итак, давайте воспользуемся пакетом rjson
для декодирования первого:
> library(rjson)
> jdata = fromJSON(data[[1]])
jdata
теперь представляет собой очень сложный вложенный список. Используйте str(jdata)
, чтобы увидеть, что в нем. Я не уверен, что вам нужно, но, возможно, этот URL:
> jdata$urls$web$project
[1] "https://www.kickstarter.com/projects/1513052868/sense-of-place-by-jose-davila"
Если нет, то нужный URL должен быть где-то в этой структуре.
Повторите data[[i]]
, чтобы получить все ссылки.
Обратите внимание, что вам следует проверить T + C на сайте, что вам разрешено это делать, а также посмотреть, есть ли API, который вам действительно стоит использовать.
person
Spacedman
schedule
12.07.2017
html_nodes(main.page1,"div.img-placeholder")
- person Spacedman   schedule 12.07.2017