0

特定の Google 検索から得られた結果の数を取得しようとしています。たとえば、stackoverflow の場合、「約 28,200,000 件の結果 (0.12 秒)」があります。

通常、私は XML R パッケージの xpathSApply 関数を使用しますが、エラーが発生しており、それらを解決する方法がわからないか、別のアプローチがあるかどうかを知りません

library(XML)
googleURL <- "https://www.google.ca/search?q=stackoverflow"
googleInfo <- htmlParse(googleURL, isURL = TRUE)
Error: failed to load external entity "https://www.google.ca/search?q=stackoverflow"

#use of RCurl which I am not that familiar with
library(RCurl)
getURL(googleURL)
#Error in function (type, msg, asError = TRUE)  : 
#SSL certificate problem, verify that the CA cert is OK. Details:
 #error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed


# final effort
library(httr)
x <- GET(googleURL)
# no error but am not sure how to proceed
# the relevant HTML code to parse is 
# <div id=resultStats>About 28,200,000 results<nobr>  (0.12 seconds)&nbsp;</nobr></div>

エラーの解決や httr オブジェクトの解析の助けをいただければ幸いです

4

1 に答える 1

3

安全な http 接続を求めています

https://www.google.ca/search?q=stackoverflow

XMLはそのままこれについて不平を言っていRCurlます。httrページをダウンロードします。

XMLセキュリティで保護されていない接続を要求する

library(XML)
googleURL <- "http://www.google.ca/search?q=stackoverflow"
googleInfo <- htmlParse(googleURL, isURL = TRUE)
xpathSApply(googleInfo,'//*/div[@id="resultStats"]')
#[[1]]
#<div id="resultStats">About 28,200,000 results</div> 

RCurlssl.verifypeer = FALSEそれが私なしで働いたあなたを使用します

library(RCurl)
googleURL <- "https://www.google.ca/search?q=stackoverflow"
googleInfo <- getURL(googleURL,ssl.verifypeer = FALSE)
googleInfo <- htmlParse(googleInfo)
# or if you want to use a cert
# system.file("CurlSSL/cacert.pem", package = "RCurl")
# googleInfo <- getURL(googleURL, cainfo = cert)
# googleInfo <- htmlParse(googleInfo)
xpathSApply(googleInfo,'//*/div[@id="resultStats"]')
#[[1]]
#<div id="resultStats">About 28,200,000 results</div> 

httr使用するcontent

library(httr)
x <- GET(googleURL)
googleInfo <- htmlParse(content(x, as = 'text'))
xpathSApply(googleInfo,'//*/div[@id="resultStats"]')
#[[1]]
#<div id="resultStats">About 28,200,000 results</div> 
于 2013-04-27T21:22:19.833 に答える