在Google Spreadsheets中使用= IMPORTXML按描述提取表格

时间:2016-09-09 19:32:30

标签: import google-sheets

从网站http://www.findagrave.com/cgi-bin/fg.cgi?page=gr&GScid=97961&GRid=22682396我试图仅将文本数据(例如,出生,死亡,生物,位置和部分创建)提取到不同的行/列中。我希望能够有一个电子表格,我可以在其中输入FindAGrave URL并让它为我提取上述数据。我在这里阅读Using =importXML in Google Docs,可以通过描述来做到这一点。从那里我学会了省略Xpath tbody。这成功地使我的导入工作,但没有使用说明。我确定使用说明会更有效率。我只是想了解其他人如何从表中导入数据。 感谢

这是我到目前为止所得到的。这将提取出生信息并放入行。一个问题是它在每个数据之间添加了一个额外的单元格。

=IMPORTXML("http://www.findagrave.com/cgi-bin/fg.cgi?page=gr&GScid=97961&GRid=22682396", "//html/body/table/tr/td[3]/table/tr[4]/td[1]/table/tr/td/table/tr/td/table/tr[1]/td[2]")

结果

Dec. 2, 1882        Humphreys County        Tennessee, USA

更新:我想我在代码中做了一些过程。这就是我现在正在使用的。

=IMPORTXML("http://www.findagrave.com/cgi-bin/fg.cgi?page=gr&GScid=97961&GRid=22682396", "//*[@class='gr'][1]//tr/td/table/tr/td/table/tr[1]/td[1]")
=IMPORTXML("http://www.findagrave.com/cgi-bin/fg.cgi?page=gr&GScid=97961&GRid=22682396", "//*[@class='gr']//tr/td/table/tr/td/table/tr[1]/td[2]/text()[1]")
=IMPORTXML("http://www.findagrave.com/cgi-bin/fg.cgi?page=gr&GScid=97961&GRid=22682396", "//*[@class='gr']//tr/td/table/tr/td/table/tr[1]/td[2]/text()[2]")
=IMPORTXML("http://www.findagrave.com/cgi-bin/fg.cgi?page=gr&GScid=97961&GRid=22682396", "//*[@class='gr']//tr/td/table/tr/td/table/tr[1]/td[2]/text()[3]")
=IMPORTXML("http://www.findagrave.com/cgi-bin/fg.cgi?page=gr&GScid=97961&GRid=22682396", "//*[@class='gr']//tr/td/table/tr/td/table/tr[1]/td[2]/text()[4]")

=IMPORTXML("http://www.findagrave.com/cgi-bin/fg.cgi?page=gr&GScid=97961&GRid=22682396", "//*[@class='gr'][1]//tr/td/table/tr/td/table/tr[2]/td[1]")
=IMPORTXML("http://www.findagrave.com/cgi-bin/fg.cgi?page=gr&GScid=97961&GRid=22682396", "//*[@class='gr']//tr/td/table/tr/td/table/tr[2]/td[2]/text()[1]")
=IMPORTXML("http://www.findagrave.com/cgi-bin/fg.cgi?page=gr&GScid=97961&GRid=22682396", "//*[@class='gr']//tr/td/table/tr/td/table/tr[2]/td[2]/text()[2]")
=IMPORTXML("http://www.findagrave.com/cgi-bin/fg.cgi?page=gr&GScid=97961&GRid=22682396", "//*[@class='gr']//tr/td/table/tr/td/table/tr[2]/td[2]/text()[3]")
=IMPORTXML("http://www.findagrave.com/cgi-bin/fg.cgi?page=gr&GScid=97961&GRid=22682396", "//*[@class='gr']//tr/td/table/tr/td/table/tr[2]/td[2]/text()[4]")

结果:

Birth: 
Nov. 8, 1948
Benton
Saline County
Arkansas, USA

Death: 
Jan. 6, 2006
Tulsa
Tulsa County
Oklahoma, USA

有没有办法在代码中分割这些数据?

2 个答案:

答案 0 :(得分:0)

以下公式

=IMPORTXML(
"http://www.findagrave.com/cgi-bin/fg.cgi?page=gr&GScid=97961&GRid=22682396",
"//html/body/table/tr/td[3]/table/tr[4]/td[1]/table/tr/td/table/tr/td/table/tr[position()<=2]/td/text()"
)

返回

Birth: 
Nov. 8, 1948
Benton
Saline County
Arkansas, USA
Death: 
Jan. 6, 2006
Tulsa
Tulsa County
Oklahoma, USA

更短的选择,

=IMPORTXML(
"http://www.findagrave.com/cgi-bin/fg.cgi?page=gr&GScid=97961&GRid=22682396", 
"//tr[4]/td[1]//tr[position()<=2]/td/text()"
)

返回相同的结果

答案 1 :(得分:0)

您可以通过简化xpath来获取多个字段 - 您还可以将多个字段添加到一个函数调用中,将xpath与|分开:

`=ARRAYFORMULA(TRIM(TRANSPOSE(IMPORTXML($A3,"//td[@align='left']/text()|//tr[6]/td/a|//tr[3]/td/text()[1]"))))`

enter image description here

使用的三个xpath是:

//td[@align='left']/text()

//tr[6]/td/a

//tr[3]/td/text()[1]