关于如何使用XML包中的readHTMLTable有很好的答案,我用常规的http页面做了,但是我不能用https页面解决我的问题。
我正在尝试读取此网站上的表格(url字符串):
library(RTidyHTML)
library(XML)
url <- "https://ned.nih.gov/search/ViewDetails.aspx?NIHID=0010121048"
h = htmlParse(url)
tables <- readHTMLTable(url)
但是我得到了这个错误:文件https://ned.nih.gov/search/Vi...does不存在。
我试图用下面的代码(下面的前两行)来解决https问题(通过使用谷歌来找到解决方案)(比如这里:http://tonybreyal.wordpress.com/2012/01/13/r-a-quick-scrape-of-top-grossing-films-from-boxofficemojo-com/)。
此技巧有助于查看页面的更多部分,但任何提取表格的尝试都不起作用。任何建议都很感谢。我需要的表字段,如组织,组织头衔,经理。
#attempt to get past the https problem
raw <- getURL(url, followlocation = TRUE, cainfo = system.file("CurlSSL", "cacert.pem", package = "RCurl"))
head(raw)
[1] "\r\n<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en\" lang=\"en\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html;
...
h = htmlParse(raw)
Error in htmlParse(raw) : File ...
tables <- readHTMLTable(raw)
Error in htmlParse(doc) : File ...
发布于 2012-05-23 01:57:07
使用Andrie的很好的方法来通过https
下面还提供了一种在不使用readHTMLTable的情况下获取数据的方法。
HTML中的表可能有一个ID,在本例中,表有一个很好的ID,getNodeSet中的XPath函数很好地完成了这项工作。
# Define certicificate file
cafile <- system.file("CurlSSL", "cacert.pem", package = "RCurl")
# Read page
page <- GET(
"https://ned.nih.gov/",
path="search/ViewDetails.aspx",
query="NIHID=0010121048",
config(cainfo = cafile, ssl.verifypeer = FALSE)
)
h = htmlParse(page)
ns <- getNodeSet(h, "//table[@id = 'ctl00_ContentPlaceHolder_dvPerson']")
ns
我仍然需要提取超级链接后面的I。
例如,我需要访问ID 0010080638,而不是collen baros作为经理
经理:Colleen Barros
发布于 2018-01-21 14:09:12
这是我必须处理这个问题的函数。检测url中是否有https,如果是,则使用httr。
readHTMLTable2=function(url, which=NULL, ...){
require(httr)
require(XML)
if(str_detect(url,"https")){
page <- GET(url, user_agent("httr-soccer-ranking"))
doc = htmlParse(text_content(page))
if(is.null(which)){
tmp=readHTMLTable(doc, ...)
}else{
tableNodes = getNodeSet(doc, "//table")
tab=tableNodes[[which]]
tmp=readHTMLTable(tab, ...)
}
}else{
tmp=readHTMLTable(url, which=which, ...)
}
return(tmp)
}
https://stackoverflow.com/questions/10692066
复制相似问题