Google电子表格 - 如何从同一网站优化许多importxml?

时间:2018-05-30 12:18:46

标签: xpath optimization import google-sheets

我有一张Google表格,其中行是产品,而列是有关这些产品的信息(材料,颜色,价格等)。

使用IMPORTXML函数和相应的xpath查询检索这些信息。在以下示例中,列D是此产品的URL。这些函数检索第3行上产品的信息(玻璃,颜色和类型):

=IMPORTXML(D3,"//table[@class='info-table']/tr[th/text()[contains(.,'Glass')]]/td")
=IMPORTXML(D3,"//table[@class='info-table']/tr[th/text()[contains(.,'Color')]]/td")
=IMPORTXML(D3,"//table[@class='info-table']/tr[th/text()[contains(.,'Type')]]/td")

对于每个产品,大约有10列被检索,因此10个不同的函数IMPORTXML用于相同的URL。

当产品很少时,它可以正常工作,但是当产品太多时,只会检索到一些信息而其他单元格会保持冻结状态"正在加载..."。

我找到的唯一解决方法是手动复制/粘贴检索到的值(Ctrl + C,Ctrl + Maj + v),然后取消阻止其他一些单元格并开始导入值。最后,我需要为所有细胞执行此操作,这需要花费很多时间。

  1. 为什么我要让细胞保持冷冻状态"正在加载......"?谷歌是否有限制?
  2. 我应该调整我的功能以优化流程吗?如果可能的话,减少IMPORTXML功能的数量?
  3. 您是否有比我耗时的解决方法更好的解决方案?
  4. xpath查询总是非常相似。是否可以使用预定义元素列表。然后使用其他Google Sheet功能获得相同的结果,但只有一个IMPORTXML功能
  5. 例如:

    =IMPORTXML(D3,"//table[@class='info-table']/tr[th/text()[contains(.,{'Glass', 'Color', 'Type'})]]/td")
    

    非常感谢,

    罗曼

1 个答案:

答案 0 :(得分:2)

可以通过调整xpath查询并使用不同的Google电子表格公式的组合来解决此问题。

  1. 可以使用字符|
  2. 组合多个xpath查询
  3. 要仅获取第一个结果,您可以通过(YOUR_XPATH)[1]
  4. 包围xpath查询
  5. TRANSPOSE功能会在同一行上移动多个结果
  6. 例如:

    =TRANSPOSE(IMPORTXML(D2,"
    (//table[@class='info-table']/tr[th/text()[contains(.,'Diameter')]]/td)[1] | 
    (//table[@class='info-table']/tr[th/text()[contains(.,'Material')]]/td)[1] | 
    (//table[@class='info-table']/tr[th/text()[contains(.,'Glass')]]/td)[1] | 
    (//table[@class='info-table']/tr[th/text()[contains(.,'W/R')]]/td)[1] | 
    (//table[@class='info-table']/tr[th/text()[contains(.,'Caliber')]]/td)[1] | 
    (//table[@class='info-table']/tr[th/text()[contains(.,'Type')]]/td)[1]"))
    

    通过这样做,每个产品只有一个importXML。