2017-08-27 2 views
0

Je sais R un peu, mais pas un pro. Je travaille sur un projet text-mining en utilisant R.texte Extrait des URL de résultats de recherche en utilisant R

Je cherchai site de la Réserve fédérale avec un mot-clé, dire « inflation ». La deuxième page du résultat de recherche a l'URL: (https://search.newyorkfed.org/board_public/search?start=10&Search=&number=10&text=inflation).

Cette page a 10 résultats de recherche (10 URL). Je veux écrire un code dans R qui va 'lire' la page correspondant à chacune de ces 10 URL et extraire les textes de ces pages web vers des fichiers .txt. Ma seule entrée est l'URL mentionnée ci-dessus.

J'apprécie votre aide. S'il y a un post similaire similaire, merci de me référer à cela. Je vous remercie.

Répondre

0

Ceci est une idée de base de la façon d'aller sur ces pages la mise au rebut. Bien qu'il puisse être lent en r s'il y a beaucoup de pages à mettre au rebut. Maintenant, votre question est un peu ambiguë. Vous souhaitez que les résultats finaux soient des fichiers .txt. Qu'en est-il des pages Web qui ont pdf? D'accord. vous pouvez toujours utiliser ce code et changer l'extension de fichier en pdf pour les pages Web qui ont des fichiers PDF.

library(xml2) 
library(rvest) 

urll="https://search.newyorkfed.org/board_public/search?start=10&Search=&number=10&text=inflation" 

    urll%>%read_html()%>%html_nodes("div#results a")%>%html_attr("href")%>% 
     .[!duplicated(.)]%>%lapply(function(x) read_html(x)%>%html_nodes("body"))%>% 
     Map(function(x,y) write_html(x,tempfile(y,fileext=".txt"),options="format"),., 
      c(paste("tmp",1:length(.)))) 

C'est la rupture du code ci-dessus: L' url vous voulez supprimer de:

urll="https://search.newyorkfed.org/board_public/search?start=10&Search=&number=10&text=inflation" 

Obtenez toutes les URL que vous avez besoin:

allurls <- urll%>%read_html()%>%html_nodes("div#results a")%>%html_attr("href")%>%.[!duplicated(.)] 

Où voulez-vous enregistrer vos textes ?? Créez les fichiers temporaires:

tmps <- tempfile(c(paste("tmp",1:length(allurls))),fileext=".txt") 

comme maintenant. Votre allurls est dans le caractère de la classe. Vous devez le changer en xml pour pouvoir les mettre au rebut. Puis finalement les écrire dans les fichiers tmp créés ci-dessus:

allurls%>%lapply(function(x) read_html(x)%>%html_nodes("body"))%>% 
     Map(function(x,y) write_html(x,y,options="format"),.,tmps) 

S'il vous plaît ne laissez rien dehors. Par exemple après ..."format"), il y a une période. Prenez cela en considération. Maintenant vos fichiers ont été écrits dans le tempdir. Pour déterminer où ils sont, tapez simplement la commande tempdir() sur la console et elle devrait vous indiquer l'emplacement de vos fichiers. En même temps, vous pouvez modifier l'emplacement des fichiers lors de la mise au rebut dans la commande tempfile.

Espérons que cela aide.

+0

Merci beaucoup, Onyambu! Réponse très utile! Merci encore! – SBAG009

1

Ici vous allez. Pour la page de recherche principale, vous pouvez utiliser une expression régulière car les URL sont facilement identifiables dans le code source.

(avec l'aide de https://statistics.berkeley.edu/computing/r-reading-webpages)

library('RCurl') 
library('stringr') 
library('XML') 

pageToRead <- readLines('https://search.newyorkfed.org/board_public/search? 
start=10&Search=&number=10&text=inflation') 
urlPattern <- 'URL: <a href="(.+)">' 
urlLines <- grep(urlPattern, pageToRead, value=TRUE) 

getexpr <- function(s,g)substring(s, g, g + attr(g, 'match.length') - 1) 
gg <- gregexpr(urlPattern, urlLines) 
matches <- mapply(getexpr, urlLines, gg) 
result = gsub(urlPattern,'\\1', matches) 
names(result) = NULL 


for (i in 1:length(result)) { 
    subURL <- result[i] 

    if (str_sub(subURL, -4, -1) == ".htm") { 
    content <- readLines(subURL) 
    doc <- htmlParse(content, asText=TRUE) 
    doc <- xpathSApply(doc, "//text()[not(ancestor::script)][not(ancestor::style)][not(ancestor::noscript)][not(ancestor::form)]", xmlValue) 
    writeLines(doc, paste("inflationText_", i, ".txt", sep="")) 

    } 
} 

Cependant, comme vous l'avez probablement remarqué, ce ne fait qu'analyser les pages .htm, pour les documents .pdf qui sont liés au résultat de la recherche, je vous conseille aller jeter un oeil là: http://data.library.virginia.edu/reading-pdf-files-into-r-for-text-mining/

+0

Merci beaucoup, Vincent. C'est très utile et m'aide beaucoup! – SBAG009