Страницы: 1
RSS
Парсинг вложенных таблиц по темам
 
Здравствуйте!

Нужно сделать вот такую шляпу. В фаиле есть 3 листа.
1 лист (Ссылка) - тут список фильмов, с ссылками на каждую страницу фильма. На каждой странице фильма есть определенная таблица, вот в качестве примера она
http://prntscr.com/qpgg1k

Нужно по каждой ссылке вытащить всю информацию и вставить ее в соответствии с таблицей на листе "ЧТО нужно получить".
Поясню: по каждой ссылке, идет фильм, в нем есть Таблица (с Параметрами: жанр, режиссер и тд. и со значениями этих параметров), нужно все вместе это свести в 1 таблицу. Готового результата не прошу, скорее нужен совет в каком направлении двигаться. ГЛАВНАЯ СУТЬ в том, что по каждой ссылке (почти в каждом фильме) значения параметров РАЗНОЕ, ну т.е. в какой-то таблице (и каком-то фильме) например есть Параметр "Оператор:" в каком-то нет. т.е. Должен быть столбце "Оператор" и напротив какого-то фильма написано должно быть "Иван Иваныч Иванов", а там где такого параметра нет должно быть написано "Н/Д" ну или прочерк, это уже не важно.

Как это думал сделать (и в принципе сделал) я. Вытащил таблицу с параметрами и их значениями по каждой ссылке. Вытащил по каждой ссылке из соответствующей таблицы Список со всеми параметрами и значения в отдельные столбцы. Вот что получилось собственно.
http://prntscr.com/qpgll7

Потом написал рекурсивную функцию, которая пробегает по всем строкам и начиная с 1 и в определенном списке накапливает ВСЕ ВОЗМОЖНЫЕ варианты параметров. На выходе получил список в котором имею все варианты параметров. Теперь осталось добавить таблицы с названиями по этому списку, и проставить соответствующие значения.

Главная проблема - способ очень громоздкий и долгий. Учитывая что позиций с ссылками около 2к, комп грузиться на несколько часов. Можно как-то придумать все это проще?

Прикладываю фаил, в котором думаю понятно что нужно получить.
Изменено: dodge - 18.01.2020 16:17:08
 
Доброе время суток
Цитата
dodge написал:
значения параметров РАЗНОЕ
Вариант
Код
let
    Source = Excel.CurrentWorkbook(){[Name="Таблица3"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Фильмы", type text}, {"Ссылка", type text}}),
    #"Added Custom" = Table.AddColumn(#"Changed Type", "Пользовательский", each getInfo([Ссылка])),
    colNames = List.Distinct(List.Combine(List.Transform(#"Added Custom"[Пользовательский], each Table.ColumnNames(_))))
in
    Table.ExpandTableColumn(#"Added Custom", "Пользовательский", colNames)

Цитата
dodge написал:
Учитывая что позиций с ссылками около 2к
Тут ещё скорость отдачи весьма и весьма затратная.
 
Андрей VG, а getInfo куда дели? :)  
 
Цитата
artyrH написал:
а getInfo куда дели?
Так думал - и так понятно - сплошное мышкоклацание :)
Код
// getInfo
(url) =>
let
    Source = Web.Page(Web.Contents(url)),
    Data0 = Source{0}[Data],
    #"Removed Columns" = Table.RemoveColumns(Data0,{"Column1"}),
    #"Transposed Table" = Table.Transpose(#"Removed Columns"),
    #"Promoted Headers" = Table.PromoteHeaders(#"Transposed Table", [PromoteAllScalars=true])
in
    #"Promoted Headers"
Изменено: Андрей VG - 18.01.2020 22:29:07
 
Спасибо, все работает, ваш способ в миллион раз лучше моего)
colNames = List.Distinct(List.Combine(List.Transform(#"Added Custom"[Пользовательский], each Table.ColumnNames(_))))
Вот до этой строки я никак не мог дойти(
Страницы: 1
Наверх