2012-02-16 4 views
1

でスクラップされたHTMLページからテキストを引き出すことができません。私は、ニューヨークタイムムービーレビューのボディを抽出して、それらのセマンティック解析を実行しようとしています。残念ながら、私のHTML + R + XMLパッケージのスキルは、仕事を完了するのに十分ではありません。 NYTムービーAPIのXML出力を使用して映画の詳細を取得することはできますが、レビューAPIの本体にアクセスするには、記事APIまたはまっすぐなウェブページのスクレイプの使い方を理解できません。私はその後、審査のWebページをつかむために、映画の細部のこのデータフレームを使用して、レビュー文章をつかむしようとR XMLパッケージ

library(RCurl) 
nyt.x.url<-'http://api.nytimes.com/svc/movies/v2/reviews/search.xml?query=The+Hangover&api-key=YOUR-OWN-FREE-API-KEY-GOES-HERE' 
nyt.x.out<-getURLContent(nyt.x.url,curl=getCurlHandle()) 
library(XML) 
a <- xmlTreeParse(nyt.x.url) 
r <- xmlRoot(a) 
# need to put the separate list items together into a mtrix, before they can be turned to a dataframe 
nyt.df <- as.data.frame(stringsAsFactors=FALSE, 
        matrix(c(as.character(r[[4]][[1]][[1]][[1]])[6], # display name 
          as.character(r[[4]][[1]][[3]][[1]])[6], # rating - agrees with rotten tomatoes, but not imdb 
          as.character(r[[4]][[1]][[4]][[1]])[6], # is it a critics pick 
          as.character(r[[4]][[1]][[5]][[1]])[6], # is it a thousand best 
          as.character(r[[4]][[1]][[11]][[1]])[6], # opening date 
          as.character(r[[4]][[1]][[15]][[1]][[1]])[6]), # this is really the URL.... 
          nrow=1, 
          ncol=6)) 

# now apply the right names 
colnames(nyt.df) <- c("Title","MPAA-Rating", "Critics.Pick", "Thousand.Best", "Release.Date", "Article.URL") 

:映画の詳細にコードをWORKING

nyt.review.out<-getURLContent(as.character(nyt.df[6]),curl=getCurlHandle()) 
a2 <- htmlTreeParse(nyt.review.url) 

しかし、私はレビューの全文に到達する方法を理解することはできません。記事のjson APIを使用しようとすると、同じ問題に遭遇します(APIのURL呼び出しは下にあります)

nyt.review.url < - 'http://api.nytimes.com/svc/検索/ V1 /記事?フォーマット= JSON &クエリ=レビュー+ +二日酔い& BEGIN_DATE = 20090605 & END_DATE = 20090606 & APIキーは= YOUR-OTHER-FREE-API-KEY-GOES-HERE」

すべてのヘルプ大いに感謝しますが、独自のAPIキーに登録する必要があります(私はコードから私を削除しました)

答えて

3

私はだと思いますこれはあなたが望むことをします。 APIから直接したいことをする方法があるかもしれませんが、私はそれを調査しませんでした。

# load package 
library(XML) 

# grabs text from new york times movie page. 
grab_nyt_text <- function(u) { 
    doc <- htmlParse(u) 
    txt <- xpathSApply(doc, '//div[@class="articleBody"]//p', xmlValue) 
    txt <- paste(txt, collapse = "\n") 
    free(doc) 
    return(txt) 
} 


###--- Main ---### 

# Step 1: api URL 
nyt.x.url <- 'http://api.nytimes.com/svc/movies/v2/reviews/search.xml?query=The+Hangover&api-key=YOUR-OWN-FREE-API-KEY-GOES-HERE' 

# Step 2: Parse XML of webpage pointed to by URL 
doc <- xmlParse(nyt.x.url) 

# Step 3: Parse XML and extract some values using XPath expressions 
df <- data.frame(display.title = xpathSApply(doc, "//results//display_title", xmlValue), 
       critics.pick = xpathSApply(doc, "//results//critics_pick", xmlValue), 
       thousand.best = xpathSApply(doc, "//results//thousand_best", xmlValue), 
       opening.date = xpathSApply(doc, "//results//opening_date", xmlValue), 
       url = xpathSApply(doc, "//results//link[@type='article']/url", xmlValue), 
       stringsAsFactors=FALSE) 

df 
#   display.title critics.pick thousand.best opening.date                       url 
#1   The Hangover   0    0 2009-06-05          http://movies.nytimes.com/2009/06/05/movies/05hang.html 
#2 The Hangover Part II   0    0 2011-05-26 http://movies.nytimes.com/2011/05/26/movies/the-hangover-part-ii-3-men-and-a-monkey-baby.html 

# Step 4: clean up - remove doc from memory 
free(doc) 

# Step 5: crawl article links and grab text 
df$text <- sapply(df$url, grab_nyt_text) 

# Step 6: inspect txt 
cat(df$text[1]) 

HTH

トニーBreyal

P.S. Rパッケージhttp://www.omegahat.org/RNYTimesもありますが、現時点ではウェブサイトがダウンしているため、何ができるのか分かりません。

+0

これは私の作業コードを改善し、ここにtrycatchを追加することによって、さらに良くなります。ありがとう。しかし、私の問題は、最後から2番目の段落のコードであり、正しくフォーマットされていないため、iPadで修正できません。問題は、レビューの6つまたはそれ以上のパラグラフで取得するためにHTMLを切り離すことができないということです。これは私が後にしているものです。 (私は映画レビューについていくつかの感情分析を実行したい) –

+0

@AndrewDempsey申し訳ありませんが、私はまったくフォローしません。あなたがAPIを介して記事の全文を取得する方法を尋ねているなら、私は分かりません。私のコードでは、記事のメインテキストを取得するためのスクリーンスクレープ(あなたの質問の「まっすぐなウェブページのスクレープ」)があります(私は段落を取得するためにコードを更新しました。 ) –

+0

(自己に注意する - ipadで夜遅くコードを読んではいけない)... @ TonyBreyal - 謝罪、私は最後の夜にコードを誤解している。大丈夫だよー。ありがとう。 –