tutorial selectorgadget scraping scrap rpubs page hacer example con como xml r web-scraping

xml - scraping - selectorgadget firefox



¿Cómo realizar un rastreo web de páginas seguras en R(enlaces https)(utilizando readHTMLTable del paquete XML)? (3)

El nuevo paquete httr proporciona un envoltorio alrededor de RCurl para que sea más fácil raspar todo tipo de páginas.

Aún así, esta página me dio una buena cantidad de problemas. Lo siguiente funciona, pero sin duda hay formas más fáciles de hacerlo.

library("httr") library("XML") # 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) ) # Use regex to extract the desired table x <- text_content(page) tab <- sub(''.*(<table class="grid".*?>.*</table>).*'', ''//1'', x) # Parse the table readHTMLTable(tab)

Los resultados:

$ctl00_ContentPlaceHolder_dvPerson V1 V2 1 Legal Name: Dr Francis S Collins 2 Preferred Name: Dr Francis Collins 3 E-mail: [email protected] 4 Location: BG 1 RM 1261 CENTER DRBETHESDA MD 20814 5 Mail Stop: Â 6 Phone: 301-496-2433 7 Fax: Â 8 IC: OD (Office of the Director) 9 Organization: Office of the Director (HNA) 10 Classification: Employee 11 TTY: Â

Obtenga httr aquí: http://cran.r-project.org/web/packages/httr/index.html

EDITAR: Página útil con preguntas frecuentes sobre el paquete RCurl : http://www.omegahat.org/RCurl/FAQ.html

Hay buenas respuestas en SO sobre cómo usar readHTMLTable del paquete XML y lo hice con páginas http normales, sin embargo no puedo resolver mi problema con las páginas https.

Estoy tratando de leer la tabla en este sitio web (cadena url):

library(RTidyHTML) library(XML) url <- "https://ned.nih.gov/search/ViewDetails.aspx?NIHID=0010121048" h = htmlParse(url) tables <- readHTMLTable(url)

Pero recibo este error: el archivo https://ned.nih.gov/search/Vi...does no existe.

Traté de superar el problema de https con esto (primeras 2 líneas a continuación) (por usar google para encontrar una solución (como aquí: http://tonybreyal.wordpress.com/2012/01/13/r-a-quick-scrape-of-top-grossing-films-from-boxofficemojo-com/ ).

Este truco ayuda a ver más de la página, pero cualquier intento de extraer la tabla no está funcionando. Cualquier consejo apreciado. Necesito los campos de la tabla como Organización, Título de organización, Administrador.

#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 ...


Esta es la función que tengo para lidiar con este problema. Detecta si https en url y usa httr si es.

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) }


Usando la gran forma de Andrie de superar los https

una forma de obtener los datos sin readHTMLTable también se encuentra a continuación.

Una tabla en HTML puede tener una identificación. En este caso, la tabla tiene una buena y la función XPath en getNodeSet lo hace muy bien.

# 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

Todavía necesito extraer las IDs detrás de los hipervínculos.

por ejemplo, en lugar de Collen Baros como gerente, necesito obtener la ID 0010080638

Gerente: Colleen Barros