提取 href attr 或将节点转换为字符列表
Extracting href attr or converting node to character list
我尝试从网站中提取一些信息
library(rvest)
library(XML)
url <- "http://wiadomosci.onet.pl/wybory-prezydenckie/xcnpc"
html <- html(url)
nodes <- html_nodes(html, ".listItemSolr")
nodes
我得到 "list" 的 HTML 代码的 30 部分。我想从 "list" 的每个元素中提取最后一个 href 属性,因此对于 30. 元素它将是
<a href="http://wiadomosci.onet.pl/kraj/w-sobote-prezentacja-hasla-i-programu-wyborczego-komorowskiego/tvgcq" title="W sobotę prezentacja hasła i programu wyborczego Komorowskiego">
所以我想获取字符串
"http://wiadomosci.onet.pl/kraj/w-sobote-prezentacja-hasla-i-programu-wyborczego-komorowskiego/tvgcq"
问题是 html_attr(nodes, "href")
不起作用(我得到了 NA 的向量)。所以我想到了正则表达式,但问题是 nodes
不是字符列表。
class(nodes)
[1] "XMLNodeSet"
我试过了
xmlToList(nodes)
但是也没用。
所以我的问题是:如何使用为 HTML 创建的函数提取此 url?或者,如果不可能,我怎样才能将 XMLNodeSet 转换为字符列表?
尝试在节点的子节点中搜索:
nodes <- html_nodes(html, ".listItemSolr")
sapply(html_children(nodes), function(x){
html_attr( x$a, "href")
})
更新
Hadley 建议使用优雅的管道:
html %>%
html_nodes(".listItemSolr") %>%
html_nodes(xpath = "./a") %>%
html_attr("href")
Package XML function getHTMLLinks()
几乎可以为我们完成所有工作,我们只需要编写 xpath 查询即可。这里我们查询所有的节点属性,判断是否有包含"listItemSolr",然后select为href查询的父节点。
getHTMLLinks(url, xpQuery = "//@*[contains(., 'listItemSolr')]/../a/@href")
在 xpQuery
中,我们正在执行以下操作:
//@*[contains(., 'listItemSolr')]
查询 listItemSolr 的所有节点属性
/..
select父节点
/a/@href
获取 href 链接
我尝试从网站中提取一些信息
library(rvest)
library(XML)
url <- "http://wiadomosci.onet.pl/wybory-prezydenckie/xcnpc"
html <- html(url)
nodes <- html_nodes(html, ".listItemSolr")
nodes
我得到 "list" 的 HTML 代码的 30 部分。我想从 "list" 的每个元素中提取最后一个 href 属性,因此对于 30. 元素它将是
<a href="http://wiadomosci.onet.pl/kraj/w-sobote-prezentacja-hasla-i-programu-wyborczego-komorowskiego/tvgcq" title="W sobotę prezentacja hasła i programu wyborczego Komorowskiego">
所以我想获取字符串
"http://wiadomosci.onet.pl/kraj/w-sobote-prezentacja-hasla-i-programu-wyborczego-komorowskiego/tvgcq"
问题是 html_attr(nodes, "href")
不起作用(我得到了 NA 的向量)。所以我想到了正则表达式,但问题是 nodes
不是字符列表。
class(nodes)
[1] "XMLNodeSet"
我试过了
xmlToList(nodes)
但是也没用。
所以我的问题是:如何使用为 HTML 创建的函数提取此 url?或者,如果不可能,我怎样才能将 XMLNodeSet 转换为字符列表?
尝试在节点的子节点中搜索:
nodes <- html_nodes(html, ".listItemSolr")
sapply(html_children(nodes), function(x){
html_attr( x$a, "href")
})
更新
Hadley 建议使用优雅的管道:
html %>%
html_nodes(".listItemSolr") %>%
html_nodes(xpath = "./a") %>%
html_attr("href")
Package XML function getHTMLLinks()
几乎可以为我们完成所有工作,我们只需要编写 xpath 查询即可。这里我们查询所有的节点属性,判断是否有包含"listItemSolr",然后select为href查询的父节点。
getHTMLLinks(url, xpQuery = "//@*[contains(., 'listItemSolr')]/../a/@href")
在 xpQuery
中,我们正在执行以下操作:
//@*[contains(., 'listItemSolr')]
查询 listItemSolr 的所有节点属性
/..
select父节点/a/@href
获取 href 链接