首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用R抓取Kickstarter?

用R抓取Kickstarter?
EN

Stack Overflow用户
提问于 2017-07-13 00:09:04
回答 1查看 717关注 0票数 0

我试着刮Kickstarter。但是,当我尝试获取引用项目的URL时,我得不到结果。

这应该是结果之一:

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

这是我的代码:

代码:

代码语言:javascript
复制
    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

有没有人看到我哪里错了?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-13 02:25:25

首先声明您使用的所有包-我必须去搜索才能意识到我需要rvest

代码语言:javascript
复制
> library(rvest)
> library(dplyr)

获取您的HTML:

代码语言:javascript
复制
> 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”类,所以这将以文本字符串的形式获取数据:

代码语言:javascript
复制
> data = main.page1 %>% 
    html_nodes("div.react-disc-landing") %>% 
    html_attr("data-project")

这些内容看起来像是JSON字符串:

代码语言:javascript
复制
> substr(data[[1]],1,80)
[1] "{\"id\":208460273,\"photo\":{\"key\":\"assets/017/007/465/9b725fdf5ba1ee63e8987e26a1d33"

所以让我们使用rjson包来解码第一个:

代码语言:javascript
复制
> library(rjson)
> jdata = fromJSON(data[[1]])

jdata现在是一个非常复杂的嵌套列表。使用str(jdata)查看其中的内容。我不确定你想要什么,但也许这个URL:

代码语言:javascript
复制
> jdata$urls$web$project
[1] "https://www.kickstarter.com/projects/1513052868/sense-of-place-by-jose-davila"

如果不是,您想要的URL一定在该结构中的某个位置。

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

请注意,您应该检查允许您执行此操作的站点T+Cs,并查看是否有您真正应该使用的API。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45062808

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档