我试着刮Kickstarter。但是,当我尝试获取引用项目的URL时,我得不到结果。
这应该是结果之一:
这是我的代码:
代码:
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有没有人看到我哪里错了?
发布于 2017-07-13 02:25:25
首先声明您使用的所有包-我必须去搜索才能意识到我需要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框架构建的)通常会填充其他DIVs,并获取图像、格式化链接等。但您只是抓取了原始的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+Cs,并查看是否有您真正应该使用的API。
https://stackoverflow.com/questions/45062808
复制相似问题