我有一个包含以下HTML的页面。
<table id="batting_gamelogs">
<tbody>
<tr class id="batting_gamelogs.153">
<td></td>
<td></td>
<td>
<span id="PHA192504150-simmoal01">
</td>
</tr>
<tr class id="batting_gamelogs.154">
<td></td>
<td></td>
<td>
<span id="PHA192504160-simmoal01">
</td>
</tr>
<tr class ="thead">
<td></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
我使用以下代码来刮表。
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)
if (length(xpathSApply(batting, '//*[@id = "batting_gamelogs"]', xmlValue))==0) next
tableNode <- xpathSApply(batting, '//*[@id="batting_gamelogs"]')[[1]]
data <- readHTMLTable(tableNode, stringsAsFactors = FALSE)
data # select the first table
total <- cbind(id,year,data)
batlist <- bind_rows(batlist, total)
}
我想省去“thead”这一类的任何一行。我不知道是否更容易刮掉整个表格,然后删除不需要的行或者不首先抓住它们。我还想将span id分配给一个名为gameid的变量,用于表格中的每一行。
我用来擦桌子的代码一下子抓住了整张桌子,但是我不确定我是否是R的新手。我试过在这里搜索,但是我无法做头或者我找到的任何东西的尾巴。
当我使用一个URL测试并选择特定的tr类id时,我用来设置gameid的代码是有效的,但是当我使用contains时却没有。我不确定是不是因为我在一个循环中运行并立刻刮掉整个表格。
gameid <- xpathSApply(batting, '//*[@id="batting_gamelogs.153"]/td[10]/span/@id')
返回此“PHA192504150-simmoal01”,表格的每一行都会有所不同/唯一。
当我在循环中运行时,我正在尝试以下代码
gameid <- xpathSApply(batting, '//*[contains(., "batting_gamelogs."]/td[10]/span/@id')
从那里开始,我将使用代码末尾的其他变量来绑定gameid。我现在没有它,因为它不起作用。
感谢您的帮助,非常感谢!!
答案 0 :(得分:0)
我能够通过修改像@ har07建议的代码并切换来从表中拉出gameid。到包含中的@id。
gameid <- xpathSApply(batting, '//*[contains(., "batting_gamelogs.")]/td[10]/span/@id')
现在看起来像
gameid <- xpathSApply(batting, '//*[contains(@id, "batting_gamelogs.")]/td[10]/span/@id')
我还能够通过对当前data.frame进行子集来排除行。我添加了这行代码来创建一个没有无用标题和misc行的新data.frame。
newdata <- subset(data, Rk!="April" & Rk!="May" & Rk!="June" & Rk!="July" & Rk!="August" & Rk!="September" & Rk!="October" & Rk!="November" & Opp!="<NA>")