use*_*274 3 html xml xpath google-sheets google-sheets-importxml
这是一个很棒的网站,通过滚动和搜索其他帖子,我已经回答了很多问题。不幸的是,我似乎无法找到专门解决该问题的答案,并认为我会尝试发布并寻求帮助-
我正在使用ImportXML和Google电子表格来“抓取”零售网站上的一些产品描述。在大多数情况下,它一直运行良好,并且我通过两种方式做到了:
1)对帖子的描述部分的特定调用:
=ImportXML(A1,"//div[@class='desc']")
Run Code Online (Sandbox Code Playgroud)
2)调用整个“产品卡”,该产品卡还返回诸如产品标题,价格,发布时间等信息,并将这些项目放置在我的Google电子表格的相邻单元格中:
=ImportXML(A1,"//div[@class='productCard']")
Run Code Online (Sandbox Code Playgroud)
两者都运行良好,但是使用每种方法我都遇到了一个不同的问题。如果我什至可以解决其中一个问题,那么我会很乐意放弃另一种方法,我只需要其中一种即可工作。问题是:
方法1)网站禁止卖家在产品发布中添加联系信息-如果他们仍然包含电子邮件地址,则网站会自动将其阻止,以便在发布中将其显示为“ ...您可以通过[... ]“ 或类似的东西。[模糊]以不同的颜色显示,并且显然以不同的方式处理。当我使用方法1抓取这些描述时,ImportXML在碰到[obscured]一词时似乎变得“颠簸”,并将剩余的文本从该产品描述传递到电子表格中的下一个单元格。这破坏了工作表的整个组织,我想找到一种方法,使ImportXML可以忽略[已遮盖的],而仍将产品描述的整个文本放在一个单元格中。
方法2)我要求整个“产品卡”如下:
=ImportXML(A1,"//div[@class='productCard']")
Run Code Online (Sandbox Code Playgroud)
如前所述,这对大多数产品来说都可以正常工作,而且我不介意在相邻单元格中发布其他信息(价格,日期等)。但是,该网站还允许对某些产品进行“精选”,使其出现在网站上的其他颜色框中,因此更有可能引起买家的注意。使用这种方法,“精选”产品不会被抓取或导入到我的电子表格中,而只会被传递出去。
描述(方法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>
Run Code Online (Sandbox Code Playgroud)
(b)
<div id="productSearchResults">
<div class="productCard featured tracked">
<div>...</div>
<div class="stats">...</div>
<div class="desc collapsed descFull">...</div>
</div>
Run Code Online (Sandbox Code Playgroud)
您可以同时在(a)和(b)中看到我在方法1中调用的'desc'类,该类似乎工作正常。从我在该站点上的阅读中,我认为我已经了解到给定的类不能超过一个单词,因此,使用“ desc折叠的descFull”和“已跟踪的productCard”以及“已跟踪的productCard”不会代表标题中包含3、2和3个单词的类,但是却分配了多个类的情况呢?
无论如何,对“ desc”(方法1)的调用都可以正常工作,并且似乎可以得到所有描述。因此,在方法2中,我本以为对“ productCard”的调用将获得所有功能产品和常规产品的信息,因为“功能”是分配给某些“ productCard”的额外类。如果我将所有的“ productCard”都称为“ productCard”,那么是否不应该退回正常的具有特色的产品?目前情况并非如此。我尝试将“跟踪的”和“功能化的”称为类,并且都不返回任何内容,因此我认为它们是等同于“ productCard”的自己的类的逻辑可能存在缺陷。
总而言之,方法1中的“ desc”调用工作正常,甚至可以获取“精选”产品的描述。但是,当联系信息包含在描述中并显示为[模糊]时,它会将我的数据撞到电子表格中紧接单词之后的下一个单元格中。这引发并破坏了所有组织。
在方法2中,我根本没有获得特色产品,这大大削弱了我想要做的事情。这些问题中的一个(或两个都可以解决)吗?
非常感谢您能给我的任何帮助。
***更新:从下面的评论中可以看出,建议的“包含”的使用通过检索常规产品和特色产品改进了方法2。但是,特色产品卡具有额外的文本元素,并且由于用这种方法刮掉了整个卡片,因此特色产品与常规产品的单元格对齐方式不匹配。如果有一种方法1的解决方法,那就更好了。如以下注释中所述,[模糊]文本以“跨度”出现,该跨度位于
<div class="desc descFull collapsed"
Run Code Online (Sandbox Code Playgroud)
如
<span class="obscureText">[obscured]</span>
Run Code Online (Sandbox Code Playgroud)
有什么办法可以像往常一样导入“ desc”,但是可以告诉XPath本质上“忽略” [obscured]跨度,或者至少以一种不会在[模糊]出现一个单元格吗?
非常感谢大家!
您可以使用concatenate()-function来包装函数,以确保所有内容都显示在一个单元格中:
=concatenate(ImportXML(A1,"//div[@class='productCard']"))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2025 次 |
| 最近记录: |