我在 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
。
旁注:我常驻欧洲,因此您可能需要在公式中将 ;
替换为 ,
。
我正在尝试从 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
。
旁注:我常驻欧洲,因此您可能需要在公式中将 ;
替换为 ,
。