3

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

我正在使用 ImportXML 和谷歌电子表格从零售网站“抓取”一些产品描述。它在大多数情况下都运行良好,我通过两种方式完成了它:

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

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

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

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

两者都运行良好,但我使用每种方法都遇到了不同的问题。如果我能解决这些问题中的一个,那么我会很高兴地放弃另一种方法,我只需要其中一个来工作。问题是:

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

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

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

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

描述(方法 1)和产品卡片(方法 2)的源代码(在实际站点上)(通过 Safari 中的“检查元素”)如下所示(对于普通产品 (a) 和特色产​​品 (b) ):

(一个)

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

(二)

<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 features tracked”不表示标题中包含 3、2 和 3 个单词的类,而是分配了多个类的情况?

无论如何,对“desc”(方法 1)的调用工作正常,并且似乎得到了所有描述。因此,在方法 2 中,我会认为调用“productCard”会获取所有产品的信息,包括特色产品和常规产品,因为“特色”是分配给某些“产品卡”的额外类。如果我调用所有'productCard',不应该返回正常的和特色的吗?目前情况并非如此。我曾尝试将“跟踪”和“特色”称为类,但都不返回任何内容,因此我认为它们是自己的类相当于“productCard”的逻辑可能有缺陷。

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

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

非常感谢你能给我的任何帮助。

***更新:如以下评论所示,通过检索常规产品和特色产品,建议使用“包含”改进方法 2。但是,特色产品卡片具有额外的文本元素,并且由于使用此方法刮取整张卡片,因此特色产品与常规产品的单元格对齐方式不匹配。如果有办法修复方法 1,那么这会好得多。如以下评论中所述,[模糊]文本出现在“跨度”中,该“跨度”紧随其后/缩进

<div class="desc descFull collapsed"

作为

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

有什么方法可以像我一样导入'desc',但是告诉XPath本质上'忽略'[模糊]跨度,或者至少以一种不会在[之后立即生成描述文本的方式处理它模糊] 出现一个单元格?

非常感谢大家!

4

1 回答 1

6

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

=concatenate(ImportXML(A1,"//div[@class='productCard']"))
于 2015-12-01T18:57:31.537 回答