如何使用Google Sheets查询Wikidata页面并抓取指定属性数据
解决方案
错误原因
- 你之前使用的
IMPORTXML第二个参数/wiki/Property:P570并非合法的XPath路径,只是Wikidata属性的相对URL,无法匹配页面内的DOM节点,因此哪怕页面存在对应属性也会返回空 - 直接请求Wikidata前端浏览页面(
/wiki/[QID])的方案稳定性极低,前端HTML是给普通用户浏览设计的,结构会频繁调整,很容易出现爬取失效的问题
最优解决方法
直接调用Wikidata官方提供的结构化API获取数据,稳定性高,不需要解析复杂的前端DOM,也不需要额外安装插件。
你可以直接在表格中使用以下公式,即可实现「存在P570属性返回对应值,不存在返回FALSE」的需求:
=IFERROR(IMPORTXML(CONCAT("https://www.wikidata.org/w/api.php?action=wbgetentities&ids=",A2,"&props=claims&format=xml"),"//claim[@mainsnak-property='P570']//value/text()"), FALSE)
公式说明
- 调用Wikidata官方
wbgetentities接口,直接返回指定QID的属性结构化数据,不会受前端页面调整影响 - XPath路径直接精准匹配属性ID为P570的声明值,查询效率更高
- 外层套
IFERROR函数,匹配不到对应属性时自动返回FALSE,完全符合你的需求 - 如果需要查询其他属性,只需要把公式中的
P570替换为目标属性的ID即可,比如查询出生日期替换为P569,查询所在地替换为P131 - 若对应属性存在多个值,公式默认返回第一个值,如需返回所有值,可在公式外层套
TRANSPOSE函数展开
内容的提问来源于stack exchange,提问作者Debs
相关产品推荐
相关产品推荐

