Как узнать, могут ли функции Google Sheets IMPORTDATA, IMPORTFEED, IMPORTHTML или IMPORTXML получать данные с ресурса, размещенного на веб-сайте?

В Google Таблицах есть несколько функций импорта

  • ИМПОРТ ДАННЫХ
  • ИМПОРТФИД
  • IMPORTHTML
  • IMPORTXML

Иногда вышеуказанные функции возвращают такие ошибки, как #N/A Imported content is empty и хотели бы убедиться, что нет проблем с импортируемым содержимым ресурса.

Как мне узнать, могут ли эти функции получить контент, который я хочу импортировать?

Я знаю, что также существует IMPORTRANGE, но эта функция может импортировать контент только из электронных таблиц Google Sheets.

2 ответа
2

Tl; Dr

Если контент добавляется динамически (с помощью Javascript), его нельзя импортировать с помощью встроенных функций Google Sheets. Кроме того, если веб-мастер веб-сайта принял определенные меры, эта функция не сможет импортировать данные.


Контент добавляется динамически

Чтобы проверить, добавляется ли контент динамически с помощью Chrome,

  1. Откройте URL-адрес исходных данных.
  2. Нажмите F12 , чтобы открыть Инструменты разработчика Chrome
  3. Нажмите Контроль+сдвиг+п , чтобы открыть меню команд.
  4. Начать печатать javascript, Выбрать Отключить JavaScript, а затем нажмите Войти для запуска команды. JavaScript отключен.

JavaScript останется отключенным на этой вкладке, пока у вас открыт DevTools.

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

Согласно с Википедия,

Веб-скрапинг, веб-сборщик, или извлечение веб-данных является очистка данных используется для извлечение данных от веб-сайты.

Использование robots.txt для блокировки поисковых роботов

Веб-мастера могут использовать файл robots.txt для блокировки доступа к веб-сайту. В таком случае результат будет #N/A Could not fetch url.

Использование агента пользователя

Веб-страница может быть спроектирована так, чтобы вместо данных возвращалось специальное настраиваемое сообщение.


IMPORTDATA, IMPORTFEED, IMPORTHTML и IMPORTXML могут получать контент из ресурсов, размещенных на веб-сайтах, которые:

  • Общедоступно. Это означает, что для доступа к ресурсу не требуется авторизация / вход в какую-либо службу.
  • Контент «статический». Это означает, что если вы откроете ресурс, используя опцию просмотра исходного кода современных веб-браузеров, он будет отображаться как простой текст.
    • ПРИМЕЧАНИЕ. Инструмент проверки Chrome показывает проанализированную модель DOM; в других работах — фактическая структура / содержание веб-страницы, которые могут быть динамически изменены с помощью кода JavaScript или расширений / плагинов браузера.
  • Контент имеет соответствующую структуру.
    • IMPORTDATA работает со структурированным контентом как csv или tsv не имеет значения расширение файла ресурса.
    • IMPORTFEED работает с размеченным контентом как ATOM / RSS
    • IMPORTHTML работает с размеченным контентом как HTML, который включает правильно размеченный список или таблицы.
    • IMPORTXML работает с размеченным контентом как XML или любой из его разновидностей, например XHTML.
  • Серверы Google не блокируются с помощью файла robots.txt или пользовательского агента.

На Валидатор разметки W3C есть несколько инструментов для проверки, правильно ли размечены ресурсы.

Что касается проверки CSV Существуют ли известные службы для проверки файлов CSV

Стоит отметить, что таблица

  • должно быть достаточно места для импортированного контента; Согласно данным, в Google Sheets ограничение на размер таблицы составляет 5 миллионов ячеек. эта почта ограничение столбцов 18278 и 50 тысяч символов в качестве содержимого ячейки даже в виде значения или формулы.
  • он плохо справляется с большим содержимым ячеек; «предел» зависит от размера и разрешения экрана пользователя, так как теперь можно увеличивать / уменьшать масштаб.

использованная литература

Связанный

Следующий вопрос касается другого результата, #N/A Could not fetch url

    (возможно, это не ответ, но вот краткое руководство по скрапингу)

    • все начинается с отключения JavaScript для веб-сайта, чтобы посмотреть, что осталось, а что можно выбросить
    • первый выбор всегда IMPORTHTML и медленно (1 на 1 ряд) потянули вниз

      =IMPORTHTML("URL"; "TABLE"; ROW(A1)-1)

    • если это не удается, повторите это с помощью:

      =IMPORTHTML("URL"; "LIST"; ROW(A1)-1)

    • если это тоже не удается, переключитесь на IMPORTXML

      =IMPORTXML("URL"; "//*")

    • если это возвращает что-то кроме #N/A его можно либо сузить с помощью XPath, либо задать регулярное выражение / запросить. если все равно не повезло, есть возможность использовать вызовы API или данные JSON вместо общедоступного URL (если существует)

      =IMPORTXML("URL"; "//div[@class="primary"]")

    • если IMPORTXML не могу получить JSON, тогда есть пользовательские IMPORTJSON функции на GitHub
    • в крайнем случае есть IMPORTDATA и очистка исходного кода, например:

      =ARRAY_CONSTRAIN(IMPORTDATA("URL"); 8000; 20)


      =REGEXEXTRACT(QUERY(ARRAY_CONSTRAIN(IMPORTDATA("URL"); 3000; 2); 
       "where Col1 contains 'meta table id something'"); ">(.+)<")

    • и если после всех попыток результат все равно #N/A, всегда есть время сдаться и найти аналогичный сайт, который можно очистить

    (еще несколько примеров RL упомянутых техник Вот)

    • 3

      Я думаю, что самая важная часть этого ответа на вопрос: «Все начинается с отключения JavaScript для веб-сайта, чтобы увидеть, что осталось, а что можно выбросить»

      — Рубен
      13 марта ’19 в 21:33

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *