【问题标题】:Using =IMPORTXML in Google Spreadsheets to extract a table by descriptions在 Google 电子表格中使用 =IMPORTXML 按描述提取表格
【发布时间】:2023-04-01 20:37:01
【问题描述】:

从网站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

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

【问题讨论】:

    标签: google-sheets google-sheets-formula google-sheets-importxml


    【解决方案1】:

    以下公式

    =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()"
    )
    

    返回相同的结果

    【讨论】:

      【解决方案2】:

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

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

      使用的三个 xpath 是:

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

      //tr[6]/td/a

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-01-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多