[英]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.