2015-06-03 53 views
0

存在另一個問題。我有一個for循環,其中包含urls來從ID batting_gamelogs的表中刮取擊球信息。如果該頁面上不存在該ID,則繼續前進到下一個URL,然後刮擦表格。如果表格不存在,則循環跳過

我認爲它應該是這樣的下面的東西,但我不能得到它的工作。

if xpathSApply(batting, '//*[@id != "batting_gamelogs"]')[[1]] next 

else 
    { 
tableNode <- xpathSApply(batting, '//*[@id="batting_gamelogs"]')[[1]] 
    data <- readHTMLTable(tableNode, stringsAsFactors = FALSE) 
    data # select the first table 
    total <- cbind(id,year,data) 

    batlist <- rbind(batlist, total) 

    } 

我附上示例代碼。

#SCRAPE BATTING STATS 

data = NULL 
batlist = NULL 

battingURLs <- paste("http://www.baseball-reference.com",yplist[,c("hrefs")],sep="") 

for(thisbattingURL in battingURLs){ 

batting <- htmlParse(thisbattingURL) 

fstampid <- regexpr("&", thisbattingURL, fixed=TRUE)-1 
fstampyr <- regexpr("year=", thisbattingURL, fixed=TRUE)+5 
id <- substr(thisbattingURL, 53, fstampid) 
year <- substr(thisbattingURL, fstampyr, 75) 

tableNode <- xpathSApply(batting, '//*[@id="batting_gamelogs"]')[[1]] 
data <- readHTMLTable(tableNode, stringsAsFactors = FALSE) 
data # select the first table 
total <- cbind(id,year,data) 

batlist <- rbind(batlist, total) 

} 

batlist 

任何幫助非常感謝!

回答

0

I can't get it to work.

這句話應該總是提醒你知道實際發生了什麼(以及它與預期發生的不同之處)。我懷疑發生了什麼事是它跳過太頻繁(而不是在應該跳過時)。但你可以告訴我們,而不是讓我們弄清楚。

if xpathSApply(batting, '//*[@id != "batting_gamelogs"]')[[1]] next 

「不」在錯誤的地方。在這裏,你說的是,如果頁面上有一個id屬性的值不是batting_gamelogs的元素,請跳過此迭代。相反,如果頁面上存在元素,並且該頁面上的id屬性的值爲batting_gamelogs,則您希望跳過此迭代。

所以,用這個你的XPath表達式:

'//*[@id = "batting_gamelogs"]' 

和放xpathSApply()了「不」外,通過測試結果列表的長度是否爲零(感謝在https://stackoverflow.com/a/25553805/423105答案):

if (length(xpathSApply(batting, '//*[@id = "batting_gamelogs"]')) == 0) next 

我拿出[[1]],因爲你只是想測試是否返回任何值;你不關心提取第一個結果。

+0

感謝@LarsH的幫助,真的很感激它!您的帖子完全合理,但我現在收到2個錯誤, 1在xpathSApply * code * + if! xpathSApply(batting,'// * [@ id =「batting_gamelogs」]')[[1]]下一個 錯誤:意外的'!'在: 「! 如果」 *代碼* 和最後} *碼*>} 錯誤:意外 '}' 在 「}」 *代碼* 對不起,如果我忽略了一些真正愚蠢的,我是R語言的新手。再次感謝! –

+0

@唐:我也是R新人......我更喜歡XPath。所以,對錯誤表示歉意,並感謝發佈錯誤消息。我已經將上述內容更新爲更有可能起作用的東西,但是我沒有測試R的環境。所以如果它仍然不起作用,我沒有真正裝備來解決問題的R方面。所需要的是測試xpathSApply()的輸出並確定是否返回任何內容。 – LarsH

+0

@唐:再次更新我的答案基於http://stackoverflow.com/a/25503686/423105 – LarsH