У меня однажды возникла задача, спарсить данные с Google таблицы не используя их API.
В итоге, вот какое решение я придумал:
googleTableParse('https://docs.google.com/spreadsheets/d/<код документа>/edit');
// Функция для парсинга Google таблицы:
async function googleTableParse(link) {
var url = link.replace(/edit$/g, 'export?format=zip');
var response = await fetch(url);
var zip = await response.blob();
var archive = await new JSZip().loadAsync(zip);
var files = Object.keys(archive.files);
var lists = Object.create(null);
for (var n = 0; n < files.length; n++) {
if (!files[n].includes('/') && files[n].includes('.html')) {
var blob = await archive.files[files[n]].async('blob');
var html = await blob.text();
var name = files[n].replace(/\.html$/g, '');
lists[name] = tableParser(html);
}
}
console.log('Таблица и все листы в нём успешно спарсены:');
console.dir(lists);
}
// Функция для парсинга html-кода таблицы из скачанного архива:
function tableParser(html) {
var doc = new DOMParser().parseFromString(html, "text/html");
var th = doc.querySelector('table > tbody > tr').querySelectorAll('th, td');
var title = [];
for (var i = 0; i < th.length; i++) {
title.push(th[i].innerText);
}
var tr = doc.querySelectorAll('table > tbody > tr');
var array = [];
for (var i = 1; i < tr.length; i++) {
var td = tr[i].querySelectorAll('th, td');
var obj = {};
var add = 0;
for (var y = 1; y < td.length; y++) {
td[y].innerHTML = td[y].innerHTML.replace(/\<br\>/g, '{перенос строки}');
obj[title[y]] = td[y].innerText.replace(/\{перенос строки\}/g, "\n").trim();
if (obj[title[y]] !== '') {
add = 1;
}
}
if (add) {
array.push(obj);
}
}
return array;
}
Для работы функции должно выполнятся 2 условия:
1. Должна быть подключена библиотека
JSZip, которая позволяет работать с zip-архивами на JavsScript
2. Каким-то образом вы должны добавить разрешающий заголовок Access-Control-Allow-Origin на все запросы к серверам Google. Лично я это сделал, через использование расширения и файла background.js но это не единственный вариант. Можно для выполнения кода использовать NodeJS или как-то проксировать процесс закачки файла.