Я хочу импортировать данные из таблицы на HTML-странице. Я применил пример IMPORTHTML от Google ("http://en.wikipedia.org/wiki/Demographics_of_India", "table", 4) к своему случаю, изменив различные параметры, но в конце концов он не работает.

Может ли кто-нибудь сказать мне, что не так с моей следующей формулой?

= IMPORTHTML («https://s.cafef.vn/screener.aspx#data», «таблица», 1)

Я хочу импортировать таблицу из https://s.cafef.vn/screener.aspx#data Первые 2 строки таблицы выглядят так:

1 Công ty cổ phần 32 A32 UpCom -15,42 212,16 -100,00 6,91 4,52 0,00 31,20 2 Công ty Cổ phần Nhựa An Phát Xanh AAA HSX 0,00 3426,19 -5,24 1,39 11,09 0,78 0,00 .............. .

Я пробовал поднять индекс таблицы с 1 до 30, но все они вообще не работают

= IMPORTHTML ("https://s.cafef.vn/screener.aspx#data", "таблица", 2) = IMPORTHTML ("https://s.cafef.vn/screener.aspx#data", "таблица ", 3) ... = IMPORTHTML (" https://s.cafef.vn/screener.aspx#data "," таблица ", 30)

Заранее большое спасибо, Цао

1
Cao Doremi 16 Янв 2021 в 19:11

2 ответа

Лучший ответ

Я верю вашей цели следующим образом.

  • Вы хотите получить таблицу по URL-адресу https://s.cafef.vn/screener.aspx#data.

Проблема и обходной путь:

Когда я увидел HTML-код URL-адреса, мне показалось, что таблица создана Javascript. В этом случае таблица не может быть напрямую получена с помощью IMPORTHTML. Об этом уже упоминалось в комментарии.

К счастью, когда я увидел HTML, я заметил, что таблица для создания с помощью Javascript установлена ​​как данные JSON. В этом случае я подумал, что при получении данных JSON значения таблицы можно будет получить с помощью скрипта Google Apps. В этом ответе в качестве обходного пути я хотел бы предложить для достижения вашей цели использовать скрипт Google Apps в качестве настраиваемой функции.

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

Скопируйте и вставьте следующий скрипт в редактор скриптов электронной таблицы. И, пожалуйста, поместите пользовательскую формулу =SAMPLE("https://s.cafef.vn/screener.aspx#data") в ячейку. Таким образом, данные HTML извлекаются и анализируются, а затем из данных JSON извлекается таблица.

function SAMPLE(url) {
  const res = UrlFetchApp.fetch(url, {muteHttpExceptions: true});
  const html = res.getContentText().match(/var jsonData \=([\S\s\w]+\}\])/);
  if (!html) return "No tables. Please confirm URL again.";
  const table = JSON.parse(html[1].replace(/\n/g, ""));
  const header = ["", "FullName", "Symbol", "CenterName", "ChangePrice", "VonHoa", "ChangeVolume", "EPS", "PE", "Beta", "Price"];
  return table.reduce((ar, e, i) => {
    const temp = header.map(f => f == "" ? i + 1 : e[f]);
    ar.push(temp);
    return ar;
  }, [header]);
}

Результат:

При запуске вышеуказанного скрипта получается следующий результат.

enter image description here

Заметка:

  • В этом примере сценария используется заголовок const header = ["", "FullName", "Symbol", "CenterName", "ChangePrice", "VonHoa", "ChangeVolume", "EPS", "PE", "Beta", "Price"];. Это таблица, которую вы хотите получить. Это ключи для данных JSON.
  • Этот пример сценария можно использовать для текущего HTML URL-адреса https://s.cafef.vn/screener.aspx#data. Поэтому, когда вы изменяете URL-адрес и сайт обновляется, а структура HTML изменяется, этот скрипт может быть недоступен. Так что будьте осторожны.

Ссылки:

1
Tanaike 17 Янв 2021 в 01:35

Вау, это работает. Спасибо, Танаике сама, это так мило с вашей стороны. Hontoni jouzu desu! ты такой умный; Сценарий Google настолько мощный, что я новичок; достигнув предела VBA, я обязательно узнаю больше о GAS.

Большое спасибо, Цао

0
Cao Doremi 17 Янв 2021 в 16:31