如何优化同一网站的多个importxml?

5
我有一个谷歌表格,其中行是产品,列是有关这些产品的信息(材料、颜色、价格等)。
使用相应的xpath查询,这些信息是通过IMPORTXML函数检索的。在下面的示例中,列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列数据,因此同一个URL需要使用10个不同的IMPORTXML函数。
当产品数量较少时,它可以正常工作,但是当产品数量太多时,只能检索到部分信息,其他单元格会显示"Loading..."。
唯一的解决方法是手动复制/粘贴检索到的值(Ctrl+C,Ctrl+Maj+v),然后其他单元格就会解除冻结并开始导入值。最终,我需要为所有单元格执行此操作,这需要很长时间。
1. 为什么有些单元格会一直显示"Loading..."?Google有没有设置限制?
2. 我应该调整我的函数以优化这个过程,并尽可能减少IMPORTXML函数的数量吗?
3. 除了我的耗时解决方法外,你是否有更好的解决方案?
4. xpath查询始终非常相似。是否可能使用预定义元素列表,然后使用其他Google表格函数仅使用一个IMPORTXML函数获得相同的结果?例如:
=IMPORTXML(D3,"//table[@class='info-table']/tr[th/text()[contains(.,{'Glass', 'Color', 'Type'})]]/td")

我发现可以使用字符|将多个IMPORTXML转换为单个IMPORTXML。此外,可以使用函数TRANSPOSE将所有结果放在一行上。例如:= TRANSPOSE(IMPORTXML(D1,“// table [@ class ='info-table'] / tr [th / text()[contains(。,'Material')]] / td | // table [@ class ='info-table'] / tr [th / text()[contains(。,'Glass')]] / td | // table [@ class ='info-table'] / tr [th / text()[contains(。,'Type')]] / td“))但是,信息未以正确的顺序显示,并且某些xpath返回多个结果。在这种情况下,我无法使用INDEX。 - Romain Capron
1个回答

9

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

  1. 可以使用字符|组合几个xpath查询
  2. 要仅获取第一个结果,可以将xpath查询括在(YOUR_XPATH)[1]中
  3. TRANSPOSE函数会将多个结果移动到同一行

例如:

=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。

1
哇塞,太棒了,正是我在寻找的。谢谢! - Steffen Funke
@Romain Capron - 对于上述解决方案,如果你需要跳过一行或两行,如何插入一个空行?类似于 | " " | 这样的东西? - AlexShevyakov
嗨@AlexShevyakov,我不确定是否完全理解你的意思。能否创建一个新问题并提供一个小例子?然后在评论中添加一个指向这个新问题的链接。这样会更方便 :-) - Romain Capron
嗨@JohnGrischam,为了解决这个问题,我分两步工作。第一步是使用单个IMPORTXML检索所有URL。然后,您可以对这些URL进行任何操作。例如,我使用函数IMAGE(an_image_url)显示图像以在单元格中显示图像。 - Romain Capron
提醒一下,使用联合运算符“|”时,xpath条目列表的顺序不会被保留 - 结果总是按照从上到下的XML树顺序返回。是否有其他保留顺序的运算符? - Tim Jim
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接