首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在R中抓取安全页面(https链接)(使用readHTMLTable from XML package)?

如何在R中抓取安全页面(https链接)(使用readHTMLTable from XML package)?
EN

Stack Overflow用户
提问于 2012-05-22 04:22:57
回答 2查看 13.1K关注 0票数 19

关于如何使用XML包中的readHTMLTable有很好的答案,我用常规的http页面做了,但是我不能用https页面解决我的问题。

我正在尝试读取此网站上的表格(url字符串):

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

此技巧有助于查看页面的更多部分,但任何提取表格的尝试都不起作用。任何建议都很感谢。我需要的表字段,如组织,组织头衔,经理。

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

回答 2

Stack Overflow用户

发布于 2012-05-23 01:57:07

使用Andrie的很好的方法来通过https

下面还提供了一种在不使用readHTMLTable的情况下获取数据的方法。

HTML中的表可能有一个ID,在本例中,表有一个很好的ID,getNodeSet中的XPath函数很好地完成了这项工作。

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

票数 4
EN

Stack Overflow用户

发布于 2018-01-21 14:09:12

这是我必须处理这个问题的函数。检测url中是否有https,如果是,则使用httr。

代码语言:javascript
复制
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)
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10692066

复制
相关文章

相似问题

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