我在 Google 工作表中的 XPath IMPORTXML 命令总是 returns #N/A

My XPath in Google Sheets IMPORTXML command always returns #N/A

我正在尝试从 Sporcle 网站上抓取一些数据(特别是从其中一个徽章获得的日期),但是我从 [F12--> 右键单击​​该元素--> 复制-- >Copy XPath] 似乎不适用于 google 工作表命令 IMPORTXML;我得到的只是#N/A.

=IMPORTXML("https://www.sporcle.com/user/Jimmy/badges/earned/","//*[@id='badge-container']/div[1]/div[3]")

网站使用动态渲染。所以,经典的方法是行不通的。我看到了 3 种方法:

  • 使用 IMPORTXML :我们从脚本元素中检索 JSON 数据并使用公式对其进行解析。

  • 使用 IMPORTXML+ImportJSON 脚本:我们从脚本元素中检索 JSON 数据,并使用脚本(清洁器)对其进行解析。

  • 使用 IMPORTFROMWEB 插件("free" 计划中的请求数量受到限制)。

解决方案 1:

输出:

首先,我们用IMPORTXML和下面的公式提取A1中的JSON数据:

=IMPORTXML(B1;"substring-before(substring-after(//*[contains(text(),'badge_limiter')],'var badgeList = [{'),'}]')")

然后我们用多个公式的组合来解析数据。在 J2 中我们写:

=QUERY(ARRAYFORMULA(SPLIT(TRANSPOSE(SPLIT(SUBSTITUE(SUBSTITUE(SUBSTITUE(REGEXREPLACE(M1;"(""\w+?_\w+?"":)";"");""",";""";");"""";"");"},";"");"{"));";"));"select Col1,Col6")

解决方案 2:

输出:

首先,我们用IMPORTXML和下面的公式提取A1中的JSON数据:

=IMPORTXML(B1;"substring-before(substring-after(//*[contains(text(),'badge_limiter')],'var badgeList = '),'}]')")&"}]"

然后我们用脚本解析数据。 F1 中使用的公式是:

=ImportJSONFromSheet("Feuille 15";"/badge_name,/earned_date")

其中 Feuille 15 是我正在使用的 sheet 的名称。剩下的是 select 感兴趣的列。

解决方案 3:

输出:

用于徽章名称和日期的 XPath : :

//td[@class='left-align link-col col-width-1']
//td[@class="col-width-3"]

然后我们把B5中的公式传进去:

=IMPORTFROMWEB(C1;C2:D2;B3:C3)

注意:务必将 jsRendering 设置为 TRUE

旁注:我常驻欧洲,因此您可能需要在公式中将 ; 替换为 ,