使用importxml和之后的子字符串提取子字符串

时间:2020-06-07 19:14:08

标签: xpath web-scraping google-sheets google-sheets-importxml

使用Google工作表“ ImportXML”,我可以使用以下方法从网址(在A2单元格中)提取以下数据:

=IMPORTXML(A2,"//a/@href[substring-after(., 'AGX:')]").

数据:

/vector/AGX:5WH
/vector/AGX:Z74
/vector/AGX:C52
/vector/AGX:A27
/vector/AGX:C6L

但是,我想提取“ / vector / AGX:”之后的代码。代码不固定为3个字母,行数也不固定。

我使用了=INDEX(SPLIT(AP2,"/,'vector',':'"),1,2)。但是它仅适用于一行数据。必须将index + split函数复制到整个列中,并且必须插入另一列来存储代码。

5WH
Z74
C52
A27
C6L

但是,我希望能够在AGX之后提取代码:一次性使用ImportXML。有办法吗?

1 个答案:

答案 0 :(得分:0)

解决方案

您的问题在于如何实现index公式。第一个参数返回行(在您的情况下为每个元素),第二个返回列(在您的情况下为AGX或之后的代码)。

如果不是在单个单元格上使用此公式,而是在范围上应用此公式,并且未为该行设置任何值,则该公式将返回实现您想要的所有值。这是其实现(其中F1:F5将是您希望应用此公式的值的范围)

=INDEX(SPLIT(F1:F5,"/,'vector',':'"),,2)

如果您仅使用IMPORTXMLXPATH对解决方案感兴趣,那么根据the documentation,您可以按如下方式使用子字符串

=IMPORTXML(A1,"//a/@href[substring-after(.,'SGX:')]")

这样做的缺点是它将返回完整的字符串,而不是仅返回SGX:之后的字符串,这意味着您将需要使用Google表格公式来拆分它。这是我专门使用XPath实现的最大成就。在XML中,应用forEach并真正选择:之后的内容会更容易,但是我相信,即使不是仅使用XPath,工作表也会更加复杂。

我希望这对您有所帮助。让我知道您是否需要其他任何东西,或者您是否不了解。 :)