Google Spreadsheets中的Xpath问题(ImportXML)

时间:2014-03-18 18:01:33

标签: html xml xpath google-sheets google-sheets-importxml

这是一个很棒的网站,我已经通过滚动和搜索其他帖子回答了很多问题。不幸的是,我似乎无法找到专门帮助解决此问题的答案,并认为我会尝试发布并寻求帮助 -

我正在使用ImportXML和谷歌电子表格来“搜索”零售网站上的一些产品说明。它在大多数情况下都运行良好,我已经用两种方式完成了它:

1)具体调用帖子的描述部分:

=ImportXML(A1,"//div[@class='desc']")

2)调用整个“产品卡”,它还会返回产品标题,价格,发布时间等信息,并将这些项目放在我的Google电子表格中的相邻单元格中:

=ImportXML(A1,"//div[@class='productCard']")

两者都运行良好,但我使用每种方法遇到了不同的问题。如果我可以解决其中一个问题,那么我很乐意废弃另一个方法,我只需要其中一个工作。问题是:

方法1)网站禁止卖家在产品发布中包含联系信息 - 当他们包含电子邮件地址时,网站会自动阻止它,因此在发布时它只是显示为“...你可以联系到我在[模糊]或类似的东西。 [模糊]出现在不同的颜色文本中,显然以某种方式区别对待。当我使用方法1抓取这些描述时,ImportXML在遇到单词[obscured]时似乎变得“碰撞”,并且它将剩余的文本从该产品描述传递到我的电子表格中的下一个单元格。这破坏了工作表的整个组织,我想找到一种方法,我可以让ImportXML忽略[模糊],并仍然将产品描述的整个文本放在一个单元格中。

方法2)我对整个“产品卡”的要求如下:

=ImportXML(A1,"//div[@class='productCard']")

如前所述,这种方法很好(对于大多数产品而言),我不介意在相邻单元格中发布附加信息(价格,日期等)。 但是,该网站还允许某些产品“特色”,它们出现在网站上的不同颜色框中,因此更有可能引起买家的注意。 使用此方法,“特色”产品不会被删除或导入到我的电子表格中,而只是简单地传递。

描述(方法1)和产品卡(方法2)的源代码(在实际站点上)(通过Safari中的'inspect element')如下所示(对于普通产品(a)和特色产品(b)):

(a)中

<div id="productSearchResults">
<div class="productCard tracked">
<div>...</div>
<div class="stats">...</div>
<div class="desc collapsed descFull">...</div>
</div>

(b)中

<div id="productSearchResults">
<div class="productCard featured tracked">
<div>...</div>
<div class="stats">...</div>
<div class="desc collapsed descFull">...</div>
</div>

你可以在(a)和(b)我在方法1中调用的'desc'类中看到,这似乎工作正常。 从我在这个网站上的阅读,我想我已经知道给定的课程不能有一个以上的单词,因此使用“desc collapsed descFull”和“productCard tracked”和“productCard featured traed”不会表示标题中包含3个,2个和3个单词的类,而是分配了多个类的情况?

无论如何,对'desc'(方法1)的调用工作正常,似乎得到了所有描述。 因此,在方法2中,我认为对'productCard'的调用将获得所有产品的信息,包括特色和常规,因为'特色'是分配给某些'productCard'的额外类。如果我打电话给所有'productCard',那么不应该退回正常的AND特色吗?目前情况并非如此。我试过把'跟踪'和'特色'称为类,并且都没有返回任何东西,所以我的逻辑是他们自己的类相当于'productCard'可能有缺陷。

总之,方法1中的'desc'调用工作正常,甚至可以获得'特色'产品的描述。但是,当联系信息包含在说明中并显示为[隐藏]时,它会将我的数据碰到电子表格中的下一个单元格,紧跟在该单词后面。这会抛弃并破坏所有组织。

在方法2中,我根本没有获得特色产品,这大大削弱了我想要做的事情。可以解决这些问题中的任何一个(或两个!)吗?

非常感谢您给予我任何帮助。

***更新:如下面的评论中所示,使用“包含”建议通过检索常规产品和特色产品来改进方法2。但是,特色产品卡具有额外的文本元素,并且由于在该方法中整个卡被刮除,因此特征产品与常规产品的单元对齐不匹配。如果有办法修复方法1,那么这将更好。 如下面的评论中所述,[模糊]文本显示在“跨度”下面/从

下面缩进
<div class="desc descFull collapsed"

作为

<span class="obscureText">[obscured]</span>

有没有什么方法可以像以前那样导入'desc',但是告诉XPath基本上'忽略'[模糊]跨度,或者至少以不产生描述文本的方式处理它在[模糊]出现一个细胞之后立即?

非常感谢大家!

1 个答案:

答案 0 :(得分:4)

您可以使用concatenate() - 函数包装您的函数,以确保它们显示在一个单元格中:

=concatenate(ImportXML(A1,"//div[@class='productCard']"))