尝试在 google 工作表中使用 importxml 从网站中提取值,但它 returns 与我选择的值完全不同
Trying to use importxml in google sheets to extract a value from a website, but it returns a completely different value than I am selecting
image of my google sheet
我正在尝试创建一个 sheet,我想在其中从 www.tapology.com 个人战士中抓取值并填充创建的列,例如战士的名字、他的记录、他来自哪里等。
我想收集这个战士的一些价值,所以我从名字开始:
https://www.tapology.com/fightcenter/fighters/119825-dominik-mazur
我整理了这样的东西:
=IMPORTXML("https://www.tapology.com/fightcenter/fighters/119825-dominik-mazur", "//div[@id='stats']/ul[1]/li[1]/span[1]")
XPath 应该指向战士的名字,即 Dominik Mazur,但由于某种原因,它 returns 随机出现了不同的战士名字。
我猜它得到了所有具有相同结构的名称,但我不知道如何挑出我正在寻找的值。
一般来说,我的目标是创建一个 google sheet,我将 link 粘贴到任何战斗机的拓扑结构中,它会用我想要的信息填充我的 sheet我手动输入所有内容。
很遗憾,我不是程序员,也不是技术人员,因此非常感谢您的帮助。如果有任何不清楚的地方,请告诉我。
解决方案
试试这个
=arrayformula(split(transpose(split(scraping("yourURLhere"),"♥")),"♦"))
具有自定义功能
function scraping(url){
var source = UrlFetchApp.fetch(url).getContentText().replace(/(\r\n|\n|\r|\t| )/gm,"")
var data = source.match(/<div class='details details_two_columns' id='stats'>[\s\S\w]+?<\/div>/g)
return (data[0].replace(/<li>/g,'♥').replace(/<span>/g,'♦').replace(/<\/li>|<strong>|<\/strong>|<\/span>/g,'').replace(/(<([^>]+)>)/g,''))
}
抓取多个网址
function infoTapology(url){
var source = UrlFetchApp.fetch(url).getContentText().replace(/(\r\n|\n|\r|\t| )/gm,"")
var data = source.match(/<div class='details details_two_columns' id='stats'>[\s\S\w]+?<\/div>/g)
var infos = data[0].replace(/<li>/g,'♥').replace(/(<([^>]+)>)/g,'').replace(/'/g,'’').replace(/"/g,'”').split('♥')
var result = []
infos.forEach(function(info){
var x = info.split(':')[0]
if (info) {x=info.replace(x+':','')}
result.push(x)
})
return([result])
}
importxml与自定义函数的比较:
https://docs.google.com/spreadsheets/d/1se1lWH4g4OSvAW2NldjGiTDS5XB19_5QwSBpMqVRy84/copy
image of my google sheet
我正在尝试创建一个 sheet,我想在其中从 www.tapology.com 个人战士中抓取值并填充创建的列,例如战士的名字、他的记录、他来自哪里等。
我想收集这个战士的一些价值,所以我从名字开始:
https://www.tapology.com/fightcenter/fighters/119825-dominik-mazur
我整理了这样的东西:
=IMPORTXML("https://www.tapology.com/fightcenter/fighters/119825-dominik-mazur", "//div[@id='stats']/ul[1]/li[1]/span[1]")
XPath 应该指向战士的名字,即 Dominik Mazur,但由于某种原因,它 returns 随机出现了不同的战士名字。
我猜它得到了所有具有相同结构的名称,但我不知道如何挑出我正在寻找的值。
一般来说,我的目标是创建一个 google sheet,我将 link 粘贴到任何战斗机的拓扑结构中,它会用我想要的信息填充我的 sheet我手动输入所有内容。
很遗憾,我不是程序员,也不是技术人员,因此非常感谢您的帮助。如果有任何不清楚的地方,请告诉我。
解决方案
试试这个
=arrayformula(split(transpose(split(scraping("yourURLhere"),"♥")),"♦"))
具有自定义功能
function scraping(url){
var source = UrlFetchApp.fetch(url).getContentText().replace(/(\r\n|\n|\r|\t| )/gm,"")
var data = source.match(/<div class='details details_two_columns' id='stats'>[\s\S\w]+?<\/div>/g)
return (data[0].replace(/<li>/g,'♥').replace(/<span>/g,'♦').replace(/<\/li>|<strong>|<\/strong>|<\/span>/g,'').replace(/(<([^>]+)>)/g,''))
}
抓取多个网址
function infoTapology(url){
var source = UrlFetchApp.fetch(url).getContentText().replace(/(\r\n|\n|\r|\t| )/gm,"")
var data = source.match(/<div class='details details_two_columns' id='stats'>[\s\S\w]+?<\/div>/g)
var infos = data[0].replace(/<li>/g,'♥').replace(/(<([^>]+)>)/g,'').replace(/'/g,'’').replace(/"/g,'”').split('♥')
var result = []
infos.forEach(function(info){
var x = info.split(':')[0]
if (info) {x=info.replace(x+':','')}
result.push(x)
})
return([result])
}
importxml与自定义函数的比较:
https://docs.google.com/spreadsheets/d/1se1lWH4g4OSvAW2NldjGiTDS5XB19_5QwSBpMqVRy84/copy