使用'rvest'提取链接

25

我正在尝试从Yelp上抓取数据。第一步是从每家餐厅中提取链接。例如,我搜索纽约市的餐厅并获得了一些结果。然后,我想提取第一页上Yelp推荐的所有10家餐厅的链接。以下是我尝试过的方法:

library(rvest)     
page=read_html("http://www.yelp.com/search?find_loc=New+York,+NY,+USA")
page %>% html_nodes(".biz-name span") %>% html_attr('href')

但是代码总是返回“NA”。有人可以帮我解决这个问题吗?谢谢!


尝试使用RSelenium。它的效果非常好。 - Bharath
1
@Bharath,谢谢!我知道如何使用RSelenium来做到这一点。我只是想看看是否可以仅使用rvest包来完成它。 - Allen
但是即使使用Selenium包,我仍然无法获取该属性,它再次为我返回NA。 - Bharath
5
你违反了他们的服务条款中的B款。他们有一个API,为什么不使用它? - hrbrmstr
@hrbrmstr,谢谢。我会看一下他们的API。 - Allen
2个回答

52
library(rvest)     
page <- read_html("http://www.yelp.com/search?find_loc=New+York,+NY,+USA")
page %>% html_nodes(".biz-name") %>% html_attr('href')

希望这能简化你的问题。


你能解释一下“biz-name”部分吗?我没有看到它作为一个类。 - Benj Young

12

我还能够清理上面的结果,这对我来说相当嘈杂。

links <- page %>% html_nodes("a") %>% html_attr("href")

通过一个简单的正则表达式字符串匹配

links <- links[which(regexpr('常见的URL元素', links) >= 1)].


1
或者,如果你想在 tidyverse 中完成这个操作,你可以在管道的末尾添加 %>% str_subset("你的正则表达式") - ulfelder

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接