使用readHTMLTable读取R中的html表,其中大多数工作但有些不工作

时间:2014-02-18 00:50:06

标签: r

我正在尝试使用R中的readHTMLTable读取几百个html表。这个工作大部分都很好,期待几个表。这些表在firefox中看起来很好。

具体来说,表格按年份和州。以下代码在2005年读取了马里兰州的第一个表,并且工作正常:

readHTMLTable("http://www.ssa.gov/policy/docs/statcomps/oasdi_sc/2005/md.html", header=FALSE)[[1]]

但是,在尝试为Maryland和2006执行此操作时,该表仅包含第一行数字。

readHTMLTable("http://www.ssa.gov/policy/docs/statcomps/oasdi_sc/2006/md.html", header=FALSE)[[1]]

我不确定问题出在哪里,如果有人能指出我的话,我会很感激。

斯蒂芬

1 个答案:

答案 0 :(得分:1)

我看到的问题是在第二个网址“http://www.ssa.gov/policy/docs/statcomps/oasdi_sc/2006/md.html”中,如果您检查源代码,您会看到在“表4”中有2个“tbody”。然后我认为readHTMLTable读了它在页面中找到的第一个tbody。这就是为什么你只得到“第一”行(这是第一个tbody标签)

你需要精确到你想要的tbody,在你的情况下,它是div中表格的第二个,ID为“table4”,你可以通过"//div[@id='table4']/table/tbody[2]"识别这个节点

doc <- "http://www.ssa.gov/policy/docs/statcomps/oasdi_sc/2006/md.html"

body <- getNodeSet(htmlParse(doc), "//div[@id='table4']/table/tbody[2]")[[1]]

> readHTMLTable(body)
                V1      V2     V3    V4    V5     V6    V7     V8  V9   V10    V11    V12
1         Allegany  16,515 10,060 1,060   120  1,955   560  2,225  75   460  4,835  7,050
2     Anne Arundel  69,550 47,150 3,245   475  6,380 2,750  7,760 100 1,690 21,900 29,260
3        Baltimore 136,035 91,755 6,040 1,200 13,470 5,545 14,695 175 3,155 41,480 61,215
4          Calvert  10,655  7,035   450    95  1,035   520  1,195  20   305  3,225  4,330
5         Caroline   5,955  3,835   180    70    575   245    835  10   205  1,760  2,355
6          Carroll  24,835 17,205 1,030   160  2,270   825  2,675  30   640  7,635 10,880
7            Cecil  15,030  8,870   630   140  1,415   725  2,435  55   760  4,210  5,330
8          Charles  14,925  9,305   625   135  1,320   950  2,040  20   530  4,275  5,625
9       Dorchester   6,980  4,860   165    65    550   265    895  10   170  2,105  2,875
10       Frederick  28,270 18,950 1,300   225  2,585 1,025  3,205  40   940  8,550 12,080
11         Garrett   6,300  3,760   435    45    780   225    855  40   160  1,910  2,485
12         Harford  34,695 23,020 1,540   235  3,330 1,365  4,140  60 1,005 10,540 14,330
13          Howard  26,855 18,825 1,150   260  2,085 1,275  2,555  25   680  8,595 11,330
14            Kent   5,385  3,865   280    40    485   125    500   5    85  1,815  2,385
15      Montgomery 105,195 76,640 6,085 1,105  8,810 3,105  7,615  80 1,755 35,725 50,710
16 Prince George's  84,190 53,900 2,770 1,025  6,370 5,815 11,420  75 2,815 24,310 32,780
17    Queen Anne's   7,050  5,030   310    50    545   225    695  15   180  2,395  2,825
18      St. Mary's  11,220  7,195   570    95  1,135   520  1,380  10   315  3,540  4,380
19        Somerset   4,625  3,055   155    55    385   180    665  10   120  1,365  1,830
20          Talbot   9,260  6,910   485    70    780   170    695   5   145  3,255  4,105
21      Washington  25,385 16,440 1,245   225  2,500   900  3,290  65   720  7,585 10,595
22        Wicomico  16,040 10,700   490   140  1,300   690  2,205  35   480  4,680  6,480
23       Worcester  13,365 10,235   440    70    965   275  1,130  20   230  4,605  5,765