我正试图从以下网址将最高法院大法官的表格加载到R中。 https://en.wikipedia.org/wiki/List_of_Justices_of_the_Supreme_Court_of_the_United_States
我正在使用以下代码:
scotusURL <- "https://en.wikipedia.org/wiki/List_of_Justices_of_the_Supreme_Court_of_the_United_States"
scotusData <- getURL(scotusURL, ssl.verifypeer = FALSE)
scotusDoc <- htmlParse(scotusData)
scotusData <- scotusDoc['//table[@class="wikitable"]']
scotusTable <- readHTMLTable(scotusData[[1]], stringsAsFactors = FALSE)
R将scotusTable返回为NULL。这里的目标是在R中获得一个data.frame,我可以用来在法庭上制作SCOTUS正义任期的ggplot。我以前有脚本工作制作一个很棒的情节,但是在最近的决定之后,页面上的某些内容发生了变化,现在脚本将无法运行。我浏览了维基百科上的HTML以试图找到任何更改,但是我不是webdev所以任何会破坏我的脚本的东西都不会立即显现出来。
此外,R中是否有一个方法可以让我从这个页面缓存数据,所以我不会经常引用这个URL?这似乎是未来避免这个问题的理想方式。 感谢帮助。
顺便说一句,SCOTUS在我的一个正在进行的爱好/侧面项目中,所以如果有一些其他数据源比维基百科更好,我全都听见了。
编辑:对不起我应该列出我的依赖项。我正在使用XML,plyr,RCurl,data.table和ggplot2库。
答案 0 :(得分:12)
如果您不介意使用其他套餐,可以试试“rvest”套餐。
library(rvest)
scotusURL <- "https://en.wikipedia.org/wiki/List_of_Justices_of_the_Supreme_Court_of_the_United_States"
选项1:从页面抓取表格并使用html_table
功能提取您感兴趣的表格。
temp <- scotusURL %>%
html %>%
html_nodes("table")
html_table(temp[1]) ## Just the "legend" table
html_table(temp[2]) ## The table you're interested in
选项2:检查表元素并复制XPath以直接读取该表(右键单击,检查元素,滚动到相关的“表”标记,右键单击它,然后选择“复制XPath” )。
scotusURL %>%
html %>%
html_nodes(xpath = '//*[@id="mw-content-text"]/table[2]') %>%
html_table
我喜欢的其他选项是将数据加载到Google电子表格中并使用"googlesheets" package进行阅读。
在Google云端硬盘中,创建一个名为“Supreme Court”的新电子表格。在第一个工作表中,输入:
=importhtml("https://en.wikipedia.org/wiki/List_of_Justices_of_the_Supreme_Court_of_the_United_States", "table", 2)
这会自动将此表格划入您的Google电子表格。
从那里,你可以做到:
library(googlesheets)
SC <- gs_title("Supreme Court")
gs_read(SC)
答案 1 :(得分:2)
你可以试试这个:
url <- "https://en.wikipedia.org/wiki/List_of_Justices_of_the_Supreme_Court_of_the_United_States"
library(rvest) #v 0.2.0.9000
the_table <- read_html(url) %>% html_node("table.wikitable:nth-child(11)") %>% html_table()
答案 2 :(得分:1)
我将删除所有<span style="display:none">
个节点并从scotusDoc读取表,而不是尝试选择已更改的表类值。
scotusDoc <- htmlParse(scotusData, encoding="UTF-8")
xpathSApply(scotusDoc, "//span[@style='display:none']", removeNodes)
x <- readHTMLTable(scotusDoc, which=2,stringsAsFactors=FALSE)
head(x)
# Judge State Born/Died Active service Chief Justice Retirement Appointed by Reason for\ntermination
1 1 John Jay† NY 1745–1829 1789–1795(5–6 years) 1789–1795 — Washington Resignation
2 2 John Rutledge SC 1739–1800 1789–1791(1–2 years) — — Washington Resignation[n 1]
3 3 William Cushing MA 1732–1810 1789–1810(20–21 years) — — Washington Death
4 4 James Wilson PA 1742–1798 1789–1798(8–9 years) — — Washington Death
5 5 John Blair, Jr. VA 1732–1800 1789–1795(5–6 years) — — Washington Resignation
6 6 James Iredell NC 1751–1799 1790–1799(8–9 years) — — Washington Death
这里是表类,所以第二个表现在是&#34; wikitable sortable&#34;
xpathSApply(scotusDoc, "//table", xmlGetAttr, "class")
[1] "wikitable" "wikitable sortable"
[3] "navbox" "nowraplinks collapsible autocollapse navbox-inner"
[5] "navbox" "nowraplinks collapsible collapsed navbox-inner
答案 3 :(得分:0)
由于某些原因,googlesheets依赖不起作用,所以我还是通过谷歌把它拉了出来。
我跑了:
=importhtml("https://en.wikipedia.org/wiki/List_of_Justices_of_the_Supreme_Court_of_the_United_States", "table", 2)
然后将文件下载为.csv
不知道为什么我之前没有想到这一点。我必须重新编写我的字符串脚本来清理它,但这最终成为1)修复我遇到的第一个问题和2)下载文件的最佳方法,这样我就不必继续引用网址。
感谢您的帮助。