4

次の Web サイトからデータを取得できません。ブラウザ経由で long_url にアクセスすると、スクレイピングしたいテーブルが表示されますが、httr を使用して R 内から URL を呼び出すと、データが返されないか、方法がわかりません。それは私に返されています。

base_url <- "http://web1.ncaa.org/stats/exec/records"
long_url <- "http://web1.ncaa.org/stats/exec/records?academicYear=2014&sportCode=MFB&orgId=721"

library(XML)
library(httr)
library(rvest) # devtools::install_github("hadley/rvest")

これらの POST リクエストの結果は、私には同じように見えます。

doc <- POST(base_url, query = list(academicYear = "2014", sportCode = "MFB",
                                         orgId = "721"))
doc <- POST(long_url)

class(doc)

どちらの POST 要求もステータス コード 200 を返し、doc のクラスは "HTMLInternalDocument" と "XMLInternalDocument" で、ページをスクレイピングできる通常の R オブジェクトです。しかし、URL にテーブルがあることはわかっていても、次の rvest 関数と XML 関数は空になります。

 table <- html_nodes(doc, css = "td")
 table <- readHTMLTable(doc)

私の httr リクエストに何が欠けているかを誰かが説明してくれませんか? GET リクエストも試してみましたが、うまくいきませんでした。

4

1 に答える 1

6

ここで遭遇しているのは、実際にはかなり一般的な問題です。重量物の持ち上げにhttr使用します。RCurlによって GET または POST リクエストで送信されるデフォルトの user_agent ヘッダーは でありRCurlNULLスクリプトを混乱させることがよくあります。これが、ブラウザと で異なる結果が得られる理由ですhttr(...)。意味のあるユーザー エージェントを偽装すると、必要な結果が得られます。

base_url <- "http://web1.ncaa.org/stats/exec/records"
ua       <- "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:33.0) Gecko/20100101 Firefox/33.0"
library(httr)
library(XML)
doc <- POST(base_url, 
            query = list(academicYear = "2014", sportCode = "MFB",orgId = "721"),
            user_agent(ua))

html <- content(doc, useInternalNodes=T)
df.list <- readHTMLTable(html)
df      <- df.list[[4]]
head(df)
#    Opponent  Game Date Air ForceScore OppScore  Loc Neutral SiteLocation GameLength Attend
# 1   Colgate 08/31/2013             38       13 Home                               - 32,095
# 2  Utah St. 09/07/2013             20       52 Home                               - 32,716
# 3 Boise St. 09/13/2013             20       42 Away                               - 36,069
# 4   Wyoming 09/21/2013             23       56 Home                               - 35,389
# 5    Nevada 09/28/2013             42       45 Away                               - 24,545
# 6      Navy 10/05/2013             10       28 Away                               - 38,225

また、この Web サイトではほぼすべてのテーブルを使用しているため、readHTMLTable(...)実際には 4 つのデータ フレームのリストが返されることに注意してください。4番目はあなたが望むものです。

必要ありませんrvest

于 2014-09-23T18:54:56.973 に答える