@tech02market
Отдел логистики

Как сделать парсинг HTML-кода в ячейку Google Sheets?

Возможно ли средствами Google Sheets спарсить html-код таблицы в ячейку?

Importhtml не подходит, так как:
1. данные сохраняются в несколько ячеек;
2. сохраняются только содержимое, а нужен непосредственно html-код таблицы <table><tbody><td> и т.д.
  • Вопрос задан
  • 485 просмотров
Пригласить эксперта
Ответы на вопрос 1
ProgrammerForever
@ProgrammerForever Куратор тега Google Sheets
Учитель, автоэлектрик, программист, музыкант
Я вот такое использовал.
/**
* Открывает URL и возвращает код страницы
* Telegram - @ProgrammerForever
*
* @param {string} URL URL который нужно открыть
* @param {boolean} isCut Указывает, нужно ли обрезать страницу до 50000 символов по длине, по умолчанию false
* @param {boolean} noScript Указывает, нужно ли удалять скрипты из кода
* @return Исходный код страницы
* @customfunction
*/
function getHTML(URL,isCut,noScript) {
  if ((URL === undefined)||(URL == "")) { return "#ОШИБКА Пустой URL";};
  if (isCut === undefined) {var isCut=true;};
  if (noScript === undefined) {var noScript=true;};
  if (URL.map){     //Если задан диапазон
    return URL.map(getHTML);
  }else{
    try {
      var payload = {
      };
      var headers={        
      };
      var options = {
        'method' : 'get',
        'headers' : headers,
        'payload': payload
      };
      
      var response = UrlFetchApp.fetch(URL,options);
      var charset=response.getAllHeaders["charset"];
      var responseText=response.getContentText(charset?charset:"UTF-8");
      if (noScript){ 
        responseText=responseText.replace(/<script[^>]*>(?:(?!<\/script>)[^])*<\/script>/gmi,"");
        responseText=responseText.replace(/<!--.*?-->/gmi,"");
        responseText=responseText.replace(/<link.*?\/>/gmi,"");
        responseText=responseText.replace(/<meta.*?\/>/gmi,"");
        responseText=responseText.replace(/[\n\r\t]/gmi,"");
        
      };
      if (isCut&&(responseText.length>50000)){return responseText.substring(0,50000);}else{return responseText;};
    } catch (err) {
      return "#ОШИБКА "+err.message;
    };
  };
};
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы