簡體   English   中英

R:使用RCurl和postForm檢索數據

[英]R: retrieving data using RCurl and postForm

我試圖從網站上抓取一些數據。 這是我通常在Perl中做的事情,但我真的想讓自己脫離Perl。 (我不是在貶低Perl;它是一個很有價值的工具,但是我十多年來仍然對這種語言的困難感到苦惱。)因為我的需求很簡單而且性能對我來說很少是一個問題,我想要把我的網頁刮到R.我知道一些R,但我從未使用過RCurl或類似的庫。

任務是刮取公開數據的數據庫。 由於我不知道如何傳遞參數,這個問題很復雜,因為我只是在查看JS源代碼並試圖找出要包含在RCurl postForm請求中的內容。 下面的代碼不會拋出任何明顯的錯誤,但它也不會返回任何有用的東西。

問:我做錯了什么?

[編輯:反映建議的變化,但尚未解決]

require(RCurl)
## -----------> Form:
## http://jamaserv.jama.or.jp/newdb/eng/index.html
## -----------> Result:
## http://jamaserv.jama.or.jp/newdb/eng/prod4/prod4TsMkEntry.html

#POST /newdb/eng/prod4/prod4TsMkEntry.html makerCd=5&additionBase=1&additionInterval=1&chkSelCnd3=0&car4Cd=100005&termFrom=201103&termTo=201203&prod4TsMkEntryForm%3AdoAction=Server&prod4TsMkEntryForm%2Feng%2Fprod4%2Fprod4TsMkEntry.html=prod4TsMkEntryForm

#POST /newdb/eng/prod4/prod4TsMkEntry.html?pass chkSelCnd3=0&prod4TsMkEntryForm%2Feng%2Fprod4%2Fprod4TsMkEntry.html=prod4TsMkEntryForm&makerCd=5&additionBase=1&termTo=201203&prod4TsMkEntryForm%3AdoAction=Server&additionInterval=1&termFrom=201103&car4Cd=100005

x <- postForm('http://jamaserv.jama.or.jp/newdb/eng/prod4/prod4TsMkEntry.html?pass',
              chkSelCnd3 = '0',
              'prod4TsMkEntryForm/eng/prod4/prod4TsMkEntry.html' = 'prod4TsMkEntryForm',
              makerCd = '5',
              additionBase = '1',
              termTo = '201203',
              'prod4TsMkEntryForm:doAction' = 'Server',
              additionInterval = '1',
              termFrom = '201103',
              car4Cd = '100005',
              .opts = curlOptions(
              referer = 'http://jamaserv.jama.or.jp/newdb/eng/prod4/prod4TsMkEntry.html',
              verbose = TRUE,
              header = TRUE,
              followLocation = TRUE,
              useragent = 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en-US; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13'
  )
)

使用瀏覽器時,表單如下所示: 在此輸入圖像描述

以上設置返回(在單獨的頁面上): 在此輸入圖像描述

您可以添加.opts參數,以指定引用(某些網站拒絕查詢,如果它來自外部),用戶代理(某些網站拒絕未知的用戶代理)並要求遵循重定向(這就是為什么您的結果空了)。 如果添加verbose=TRUE則會有更多信息:在發送表單內容之前,初始POST查詢實際上失敗,而RCurl會嘗試更改GET查詢,這會返回錯誤消息(“Type(Motor Vehicle)”未選中) “)。

x <- postForm(
  ...,
  .opts = curlOptions(
    referer="http://jamaserv.jama.or.jp/newdb/eng/prod4/prod4TsMkEntry.html",
    verbose = TRUE, 
    followLocation = TRUE,
    useragent = "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en-US; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13"
  )
)

事實證明,它最初出現的問題要復雜得多,涉及服務器端的Javascript和各種各樣的東西。 使用我在這個問題中使用的簡單方法似乎不可行。 所以,回答我自己的問題並繼續......

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM