我在 Google 电子表格上使用 ImportXML 来抓取 YouTube 搜索结果并捕获我正在跟踪的视频的排名。
=IMPORTXML("https://www.youtube.com/results?search_query=control+theory&page=1"),"//div[@class='yt-lockup-byline']//a")
Run Code Online (Sandbox Code Playgroud)
抓取效果很好(我得到了第一页的所有结果)。然后我查找 YouTube 结果的位置并将其保存在一个单元格中。
但是,我遇到的问题是当我尝试跟踪该排名的时间。不确定如何执行此操作,但我正在寻找一种=ImportXML
每天运行该函数的方法(是否有刷新命令?),并在每次运行该函数时将该单元格的结果保存在新行中。
有任何想法吗?
我到处搜索,但没有找到方法。是为了=Googlefinance("ticker")
,中国的上证指数是否可以作为谷歌金融的股票代码,用于谷歌表格?
google-finance google-sheets web-scraping google-sheets-formula 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]跨度,或者至少以一种不会在[模糊]出现一个单元格吗?
非常感谢大家!
我有下面的脚本,它在名为价格的谷歌表中导入一些 XML 数据。一切正常,只是我设置了一个时间驱动的触发器每分钟运行一次,但数据不会更新。
我只有这个功能作为一个项目。
function getData() {
var sheetName = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("prices");
var queryString = Math.random();
var cellFunction = '=ImportXML("http://myxmldata.com/data-xml.php","//data/date")';
sheetName.getRange('A2').setValue(cellFunction);
}
Run Code Online (Sandbox Code Playgroud)
那么怎么了?
我正在尝试从 Yahoo Finance 导入 Google 表格中的股票实时价格、实时交易量和平均交易量,但不确定 XPath 是否用于相同的用途。
例如,对于 URL
https://sg.finance.yahoo.com/quote/AMZN
under summary tab:
realtime price: 1910.21
volume: https://sg.finance.yahoo.com/quote/AMZN
avg. volume: 4,406,091
Run Code Online (Sandbox Code Playgroud)
在这里我尝试修改下面的代码但不确定 XPath
=INDEX(IMPORTXML("https://sg.finance.yahoo.com/quote/AMZN","//div[@id='quote-header-info']/div[last()]/div[1]"),1)
Run Code Online (Sandbox Code Playgroud)