使用Google Sheets的IMPORTXML爬取Transfermarkt数据遇问题求助
解决Google Sheets IMPORTXML爬取Transfermarkt球队信息失败的问题
问题根源
出现「Resource at URL not found」错误,核心原因是Transfermarkt的反爬机制:Google Sheets的IMPORTXML请求没有携带浏览器标识的User-Agent,被服务器直接拦截,并非路径或URL本身的问题。
解决办法:用Google Apps Script自定义函数绕开反爬
- 打开你的Google Sheets,点击菜单栏「扩展程序」→「Apps Script」
- 删除默认代码,粘贴以下脚本:
function getTransfermarktTeam(url) { const options = { headers: { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36' } }; const response = UrlFetchApp.fetch(url, options); const content = response.getContentText(); const doc = XmlService.parse(content); const root = doc.getRootElement(); // 用基于class的相对XPath,比绝对路径更稳定 const teamElement = XmlService.getNamespaceManager().getXPathResult(root, '//span[contains(@class, "info__content")]/a[1]', XmlService.XPathResultType.FIRST_ORDERED_NODE_TYPE); return teamElement.singleNodeValue ? teamElement.singleNodeValue.getText() : 'N/A'; }
- 保存脚本(可命名为
TransfermarktScraper),回到表格后,在目标单元格输入=getTransfermarktTeam(B1)即可获取球队名称。
补充说明
- 原XPath失效风险:你之前用的绝对路径
/html/body/div[3]/main/header/div[4]/div/span[1]/a依赖页面固定层级,Transfermarkt页面结构一旦调整就会失效;改用基于class属性的相对XPath(比如上述脚本里的路径),稳定性会大幅提升。 - 后续扩展提取其他数据:只需修改脚本中的XPath即可(比如提取身价可定位对应class的元素),同时注意不要频繁批量请求,避免触发IP封禁。
内容的提问来源于stack exchange,提问作者Bevans
相关产品推荐
相关产品推荐

