Очистка данных с чужой страницы Google Sheets с помощью node.js ?

#node.js #web-scraping #google-sheets

#node.js #очистка веб-страниц #google-sheets

Вопрос:

Может кто-нибудь дать мне представление о том, как можно выполнить очистку данных со страницы Google Sheets, которая мне не принадлежит? Использование API не вариант.

Я вижу много руководств о том, как ИСПОЛЬЗОВАТЬ листы для хранения данных веб-очистки, но ничего о том, как ПОЛУЧИТЬ информацию СО страницы Sheets

Надеюсь, я смогу сделать это с помощью node.js . Кто-нибудь знает лучший способ сделать это?

Комментарии:

1. О how one might go about scraping data from a Google Sheets page that is not owned by me , могу я спросить вас о текущей ситуации? Потому что, если электронная таблица не является общедоступной, ваша цель не может быть достигнута.

2. Это общедоступно. Я слишком много думаю об этом? Может быть, я должен просто подойти к нему, как к любой другой веб-странице.

3. Чтобы использовать API, у него должны быть учетные данные, созданные через облачную консоль Google, правильно? Я не думаю, что владельцы готовы сделать это за меня. Пожалуйста, поправьте меня, если я неправильно понимаю. Я изучу сценарий приложений, спасибо.

4. Извините. У меня должно было быть еще одно подтверждение. Из вашего ответа я понял, что электронная таблица, которую вы хотите получить, является общедоступной. В этом случае электронная таблица является общедоступной, а не публикуется в Интернете? Или электронная таблица доступна для общего доступа в качестве веб-публикации? Это также важный момент для извлечения значений.

5. Итак, можете ли вы подтвердить следующие конечные точки? 1. https://docs.google.com/spreadsheets/d/{spreadsheetId}/edit?usp=sharing 2. https://docs.google.com/spreadsheets/d/{spreadsheetId}/pubhtml Не могли бы вы сказать мне, к какой конечной точке вы можете получить доступ? Или оба? Исходя из этого результата, я хотел бы предложить пример сценария.

Ответ №1:

Я считаю, что ваша цель заключается в следующем.

  • Вы хотите получить значения из общедоступной электронной таблицы Google.
  • Вы хотите добиться этого с помощью Node.js .
  • Из trying /edit?usp=sharing yielded /edit#gid=0, and /pubhtml yielded page stating: "We're sorry. This document is not published." , было обнаружено, что электронная таблица Google общедоступна, что не соответствует веб-публикации.

Шаблон 1:

В этом шаблоне метод «spreadsheets.values.get» в API Sheets используется с ключом API. Перед запуском скрипта, пожалуйста, извлеките свой ключ API. Ссылка

Пример сценария:

 const request = require("request");

const apiKey = "###";  // Please set your API key.
const spreadsheetId = "###";  // Please set the Spreadsheet Id.
request.get(
  {
    url:
      `https://sheets.googleapis.com/v4/spreadsheets/${spreadsheetId}/values/A:Z?key=${apiKey}`,
    json: true,
  },
  (err, res, body) => {
    if (err) {
      console.log(body);
      return;
    }
    console.log(body.values);
  }
);
  
  • При запуске вышеупомянутого скрипта значения в ячейках A:Z 1-й вкладки возвращаются из общедоступной электронной таблицы в виде 2-мерного массива.

  • Если вы хотите получить другие вкладки, пожалуйста, извлеките имена листов, используя метод spreadsheets.get в API Sheets. Конечная точка этого заключается в следующем.

       https://sheets.googleapis.com/v4/spreadsheets/{spreadsheetId}?fields=sheets.properties.titleamp;key={apiKey}
      

Шаблон 2:

В этом шаблоне используются веб-приложения, созданные с помощью Google Apps Script.

Использование:

Пожалуйста, выполните следующие действия.

1. Создайте новый проект скрипта Google Apps.

Пример сценария веб-приложений — это сценарий Google Apps. Поэтому, пожалуйста, создайте проект скрипта Google Apps.

Если вы хотите создать его напрямую, пожалуйста, перейдите к https://script.new /. В этом случае, если вы не вошли в Google, откроется экран входа в систему. Поэтому, пожалуйста, войдите в Google. При этом открывается редактор сценариев Google Apps Script.

2. Подготовьте сценарий.

Пожалуйста, скопируйте и вставьте следующий скрипт (скрипт Google Apps) в редактор сценариев. Этот скрипт предназначен для веб-приложений.

 function doGet(e) {
  const spreadsheetId = e.parameter.spreadsheetId;
  const ss = SpreadsheetApp.openById(spreadsheetId);
  const values = ss.getSheets().map(s => ({sheetName: s.getSheetName(), values: s.getDataRange().getValues()}));
  return ContentService.createTextOutput(JSON.stringify(values));
}
  

3. Развертывание веб-приложений.

  1. В редакторе сценариев откройте диалоговое окно с помощью «Опубликовать» -> «Развернуть как веб-приложение».
  2. Выберите «Я» для «Выполнить приложение как:».
  3. Выберите «Любой, даже анонимный» для «Кто имеет доступ к приложению:».
  4. Нажмите кнопку «Развернуть» как новую «версию проекта».
  5. Автоматически открывается диалоговое окно «Требуется авторизация».
    1. Нажмите «Просмотреть разрешения».
    2. Выберите собственную учетную запись.
    3. Нажмите «Дополнительно» в разделе «Это приложение не проверено».
    4. Нажмите «Перейти к ### название проекта ### (небезопасно)»
    5. Нажмите кнопку «Разрешить».
  6. Нажмите «ОК».
  7. Скопируйте URL веб-приложений. Это как https://script.google.com/macros/s/###/exec .
    • Когда вы изменили сценарий Google Apps, пожалуйста, повторно разверните его как новую версию. При этом измененный скрипт отображается в веб-приложениях. Пожалуйста, будьте осторожны с этим.

4. Тестирование веб-приложений с помощью Node.js .

Пожалуйста, получите доступ к URL-адресу ваших веб-приложений с помощью браузера, указав параметры запроса следующим образом. Когда вы уже вошли в Google, запускается скрипт веб-приложений.

 const request = require("request");

const spreadsheetId = "###";  // Please set the Spreadsheet Id.
const url = "https://script.google.com/macros/s/###/exec";  // Please set the URL of Web Apps.
request.get(
  {
    url: `${url}?spreadsheetId=${spreadsheetId}`,
    json: true,
  },
  (err, res, body) => {
    if (err) {
      console.log(body);
      return;
    }
    console.log(body);
  }
);
  
  • При запуске вышеупомянутого скрипта возвращается следующий результат.

       [
          sheetName: 'Sheet1',
          values: [ [Array], [Array], [Array],,, ]
        },
        {
          sheetName: 'Sheet2',
          values: [ [Array], [Array], [Array],,, ]
        },
        ,
        ,
        ,
      ]
      

Примечание:

  • Когда вы изменили сценарий веб-приложений, пожалуйста, повторно разверните веб-приложения как новую версию. При этом последний скрипт отображается в веб-приложениях. Пожалуйста, будьте осторожны с этим.
  • Сценарий Google Apps — это простой пример сценария для объяснения метода достижения вашей цели. Поэтому, пожалуйста, измените его для вашей реальной ситуации.

Ссылки:

Комментарии:

1. Это так хорошо написано и всеобъемлюще! Мне жаль говорить, что я отложил этот проект на данный момент и углубился в другой, поэтому я не смогу попробовать его сразу, но я с нетерпением жду возможности приступить к нему через несколько недель. Спасибо!

2. @AveryFreeman Спасибо за ответ. Если мое предложение не было полезным для вашей ситуации, я приношу свои извинения.