用R刮Kickstarter?

时间:2017-07-12 16:09:04

标签: r web-scraping screen-scraping scrapy-spider kickstarter

我试图刮掉Kickstarter。但是,当我尝试获取引用项目的URL时,我没有得到结果。

这应该是结果之一:

https://www.kickstarter.com/projects/1534822242/david-bowie-hunger-city-photo-story?ref=category_ending_soon

这是我的代码:

代码:

    main.page1 <- read_html(x ="https://www.kickstarter.com/discover/advanced?
    category_id=1&sort=end_date&seed=2498921&page=1")

    urls1 <- main.page1 %>% # feed `main.page` to the next step
            html_nodes(".block.img-placeholder.w100p") %>% # get the CSS nodes
            html_attr("href") # extract the URLs

有谁看到我哪里出错了?

1 个答案:

答案 0 :(得分:2)

首先声明你使用的所有软件包 - 我必须去搜索才能意识到我需要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")

就这而言,每个项目的数据都隐藏在一堆div中的data-project属性中。浏览器中的一些Javascript(我怀疑使用React框架构建)通常会填充其他DIV并获取图像,格式化链接等。但是您刚刚抓取原始HTML以便无法使用。但原始数据是....所以....

相关的div似乎是class&#34; react-disc-landing&#34;所以这将数据作为文本字符串:

> 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)查看其中的内容。我不确定你想要什么,但也许这个网址:

> jdata$urls$web$project
[1] "https://www.kickstarter.com/projects/1513052868/sense-of-place-by-jose-davila"

如果没有,您想要的URL必须位于该结构的某个位置。

重复data[[i]]以获取所有链接。

请注意,您应该检查您可以执行此操作的站点T + Cs,还要查看您是否应该使用的API。