gpt4 book ai didi

javascript - 超过 Google 电子表格的 ImportXML 限制

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:01:40 24 4
gpt4 key购买 nike

我现在正卡在一个“抓取问题”上。特别是我想从网页中提取作者姓名到谷歌电子表格。实际上函数 =IMPORTXML(A2,"//span[@class='author vcard meta-item']") 正在工作,但是在我增加要抓取的链接数量之后它才开始加载无穷无尽。

所以我研究并发现,这个问题是由于谷歌的限制。

有没有人知道超过限制或脚本,我可以“轻松复制”? - 我真的没有编码的预感。

最佳答案

我创建了一个自定义导入函数,它克服了 IMPORTXML 的所有限制,我有一个工作表在大约 800 个单元格中使用它并且效果很好。

它利用 Google 表格的自定义脚本(工具 > 脚本编辑器...)并使用正则表达式而不是 xpath 搜索内容。

function importRegex(url, regexInput) {
var output = '';
var fetchedUrl = UrlFetchApp.fetch(url, {muteHttpExceptions: true});
if (fetchedUrl) {
var html = fetchedUrl.getContentText();
if (html.length && regexInput.length) {
output = html.match(new RegExp(regexInput, 'i'))[1];
}
}
// Grace period to not overload
Utilities.sleep(1000);
return output;
}

然后您可以像使用任何函数一样使用此函数。

=importRegex("https://example.com", "<title>(.*)<\/title>")

当然,你也可以引用单元格。

=importRegex(A2, "<title>(.*)<\/title>")

如果你不想在输出中看到 HTML 实体,你可以使用这个函数。

var htmlEntities = {
nbsp: ' ',
cent: '¢',
pound: '£',
yen: '¥',
euro: '€',
copy: '©',
reg: '®',
lt: '<',
gt: '>',
mdash: '–',
ndash: '-',
quot: '"',
amp: '&',
apos: '\''
};

function unescapeHTML(str) {
return str.replace(/\&([^;]+);/g, function (entity, entityCode) {
var match;

if (entityCode in htmlEntities) {
return htmlEntities[entityCode];
} else if (match = entityCode.match(/^#x([\da-fA-F]+)$/)) {
return String.fromCharCode(parseInt(match[1], 16));
} else if (match = entityCode.match(/^#(\d+)$/)) {
return String.fromCharCode(~~match[1]);
} else {
return entity;
}
});
};

一起……

function importRegex(url, regexInput) {
var output = '';
var fetchedUrl = UrlFetchApp.fetch(url, {muteHttpExceptions: true});
if (fetchedUrl) {
var html = fetchedUrl.getContentText();
if (html.length && regexInput.length) {
output = html.match(new RegExp(regexInput, 'i'))[1];
}
}
// Grace period to not overload
Utilities.sleep(1000);
return unescapeHTML(output);
}

var htmlEntities = {
nbsp: ' ',
cent: '¢',
pound: '£',
yen: '¥',
euro: '€',
copy: '©',
reg: '®',
lt: '<',
gt: '>',
mdash: '–',
ndash: '-',
quot: '"',
amp: '&',
apos: '\''
};

function unescapeHTML(str) {
return str.replace(/\&([^;]+);/g, function (entity, entityCode) {
var match;

if (entityCode in htmlEntities) {
return htmlEntities[entityCode];
} else if (match = entityCode.match(/^#x([\da-fA-F]+)$/)) {
return String.fromCharCode(parseInt(match[1], 16));
} else if (match = entityCode.match(/^#(\d+)$/)) {
return String.fromCharCode(~~match[1]);
} else {
return entity;
}
});
};

关于javascript - 超过 Google 电子表格的 ImportXML 限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39014766/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com