Как импортировать таблицу со смесью метаданных текста и изображения с помощью IMPORT HTML и / или IMPORT XML? - PullRequest
0 голосов
/ 27 марта 2020

Я пытаюсь импортировать таблицы со смесью текста и изображений в Google Sheets с помощью функции IMPORT HTML и / или IMPORT XML.

Таблицы, которые я пытаюсь импортировать, являются Таблицы «Оборудование» в разделе «Улучшения» с нескольких сайтов, например: https://stt.wiki/wiki/Xindi_%27Prisoner%27_Archer.

Количество звездочек на каждом элементе в таблице представляет собой «уровень» от 1 ( От "общего") до 5 ("Легендарный"), без звездочек, представляющих уровень 0 ("Бази c"). Метаданные изображения содержат описание уровня. Пример уровня «Легендарный»:

<img alt="Legendary" src="/w/images/thumb/b/b5/StarItem.png/15px-StarItem.png" title="Legendary" width="15" height="15" style="vertical-align: sub" srcset="/w/images/thumb/b/b5/StarItem.png/23px-StarItem.png 1.5x, /w/images/thumb/b/b5/StarItem.png/30px-StarItem.png 2x">

Моя проблема заключается в том, чтобы включить информацию об уровне в импорт в виде изображений или метаданных изображения.

Моя конечная цель - создать такую ​​таблицу (создано вручную):

desired outcome

(столбцы E и I с URL-адресами необязательны).


ИМПОРТ HTML:

Сначала я попытался импортировать с помощью IMPORT HTML, ячейка A1 содержит URL (см. Выше) (обратите внимание, что в формулах необходимо использовать точку с запятой из-за локальных настроек) :

=IMPORTHTML(A1; "table"; 4)

Это дает мне эту таблицу:

import result for above code

К сожалению, "звезды" из исходной таблицы не импортируются.

1) Итак, первый вопрос: есть ли способ включить изображения из таблицы методом IMPORT HTML? Или как метаданные из изображений?


ИМПОРТ XML:

Затем я попытался использовать ИМПОРТ XML, чтобы получить только недостающие данные уровня:

=IMPORTXML(A1; "//*[@id='mw-content-text']/div/table[3]/tbody/tr/td/span/img[1]/@alt").

ИМПОРТ HTML дал мне всего 40 предметов, но с этим ИМПОРТОМ XML я получаю только 37 значений для уровней предметов. Это потому, что с моим методом IMPORT XML я не получаю информацию об элементах "Basi c", то есть об элементах без звездочек.

Так что теперь у меня есть список из 37 уровней и таблица из 40 предметов, но без логической связи между ними. В списке уровней потребуются записи (могут быть пустыми ячейками) для базовых c элементов в правильных позициях в списке, чтобы сделать возможным присвоение между элементами и уровнями.

2) Итак, мой второй вопрос : Для метода ИМПОРТ XML есть ли способ получить результат с тем же числом ячеек в листах Google, что и в исходной таблице, даже если для некоторых ячеек исходной таблицы XPATH не совпадает? В этом случае импорт может дать пустую ячейку. В этом примере это даст мне список из 40 ячеек, 3 из которых будут пустыми.


Также приветствуются другие решения с Google Sheets.

Ответы [ 2 ]

2 голосов
/ 27 марта 2020

вас это удовлетворит:

=ARRAYFORMULA(IFERROR(VLOOKUP(B4:B13&C4:C13, {
 IMPORTXML($A1, "//table[3]/tbody//span/img[1]/@title/preceding::td[@class='ItemRight'][1]")&
 IMPORTXML($A1, "//table[3]/tbody//span/img[1]/@title/preceding::a[1]"),
 VLOOKUP(IMPORTXML($A1, "//table[3]/tbody//span/img[1]/@title"),
 {"Common",     "★", "", "", "", "";
  "Uncommon",   "★", "★", "", "", "";
  "Rare",       "★", "★", "★", "", "";
  "Super Rare", "★", "★", "★", "★", "";
  "Legendary",  "★", "★", "★", "★", "★"}, 
 {2, 3, 4, 5, 6}, 0)}, {2, 3, 4, 5, 6}, 0)))

enter image description here

или с оригинальными звездами:

=ARRAYFORMULA(IMAGE(SUBSTITUTE(IFERROR(VLOOKUP(B4:B13&C4:C13, {
 IMPORTXML($A1, "//table[3]/tbody//span/img[1]/@title/preceding::td[@class='ItemRight'][1]")&
 IMPORTXML($A1, "//table[3]/tbody//span/img[1]/@title/preceding::a[1]"), 
 VLOOKUP(IMPORTXML($A1, "//table[3]/tbody//span/img[1]/@title"), 
 {"Common",     "★", "", "", "", "";
  "Uncommon",   "★", "★", "", "", "";
  "Rare",       "★", "★", "★", "", "";
  "Super Rare", "★", "★", "★", "★", "";
  "Legendary",  "★", "★", "★", "★", "★"}, 
 {2, 3, 4, 5, 6}, 0)}, {2, 3, 4, 5, 6}, 0)), "★", 
 "https://stt.wiki/w/images/thumb/b/b5/StarItem.png/15px-StarItem.png"), 3))

0


оригинал:

enter image description here


таблица демо

1 голос
/ 27 марта 2020

Раствор XPath (используется 6, проверьте желтые ячейки):

enter image description here

Star.Treck.Sheet

Сначала мы получим структуру таблицы с помощью ИМПОРТА HTML. Затем с помощью XPath мы получаем идентификаторы, имена членов и уровни каждого со звездой (то есть рангом). Затем мы получаем идентификаторы и имена всех участников (со звездочкой и без нее). Мы VLOOKUP, чтобы построить таблицу уровней (см. Join.levels). Нет звезды >> "Basi c". Мы получаем URL-адреса. Наконец, мы создаем нашу финальную таблицу с CONCAT (идентификаторы + имена, чтобы обеспечить соединение).

...