@HelloPollyDamn

Как вывести данные с сайта c таблицами?

Есть сайт с которого необходимо вывести данные АПИ нет
только парсинг, пробовал через =IMPORTHTML и =IMPORTXML
пробывал так не выходит
в А6 сам сайт
=IMPORTXML(A6;"/html/body/div[2]/div[2]/div/div/div[1]/div[2]/div[2]/div/div/table/tbody/tr[3]/td[5]")
РЕЗУЛЬТАТ #Н/Д

=IMPORTXML(A6;"//td=@class['ng-binding']")РЕЗУЛЬАТ ЛОЖЬ

подскажите как быть именно с этого сайта не получается с альтернативных все успешно через Xpatch ?
  • Вопрос задан
  • 80 просмотров
Решения вопроса 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 = {
        'rand':(new Date()).getTime()
      };
      var headers={
        'Connection': 'keep-alive',
        'Cache-Control': 'max-age=0',
        'Upgrade-Insecure-Requests': 1,
        'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36',
        'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3',
        'Accept-Encoding': 'gzip, deflate, br',
        'Accept-Language': 'ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7'
      };
      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:"windows-1251");
      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 JSON.stringify(err);
      return "#ОШИБКА "+err.message;
    };
  };
};

Если данные получаются вразумительные и то что нужно есть в выводе - то есть вариант распарсить. А так нужные данные могут грузиться дополнительными запросами или может стоять промежуточная защита, вплоть до капчи.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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