Как извлечь несколько таблиц на нескольких веб-сайтах с помощью мощного запроса - PullRequest
0 голосов
/ 28 февраля 2019

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

Требуется знать код

Ответы [ 2 ]

0 голосов
/ 04 марта 2019

Создайте пустой запрос в PQ, перейдите в расширенный редактор, нажмите Ctrl-A и вставьте этот текст:

= (url) => let Source = Web.Page(Web.Contents(url)), Custom1 = Table.SelectRows(Source, each Value.Is([Data], type table) and Table.RowCount([Data])>0 and List.First(Table.ColumnNames([Data])) = "MODEL TYPE"), #"Expanded Data" = let c = List.Accumulate(Table.ColumnNames(List.First(Custom1[Data])), {{},{}}, (s,c)=> {s{0} & {c}, s{1} & {"Data." & c}}) in Table.ExpandTableColumn(Custom1, "Data", c{0}, c{1}) in #"Expanded Data"

Назовите запрос, например, «Q», затем импортируйтетаблицу со всеми вашими URL-адресами и добавьте в нее пользовательский столбец с помощью

Q(Name of column with urls)

. Возможно, вам придется установить уровень конфиденциальности для общего доступа, если PQ попросит вас об этом.

Затем разверните добавленный столбец.Вот и все.

0 голосов
/ 01 марта 2019

Если я правильно вас понимаю, это может помочь.При этом будут собраны все данные из всех таблиц на сайте goo-net-exchange.com/catalog/NISSAN__BLUEBIRD, добавленные вместе в одну таблицу.

В Power Query выберите Домой> Новый источник> Другие источники> Веб.Затем введите вашу ссылку и нажмите OK:

enter image description here

Затем нажмите на папку и нажмите OK.

enter image description here

Затем отфильтруйте Источник, который не является таблицей.

enter image description here

Затем щелкните правой кнопкой мыши заголовок столбца «Данные» и выберите «Удалить другие столбцы».

enter image description here

enter image description here

Затем нажмите enter image description here, чтобы развернуть все таблицы.

enter image description here

Нажмите OK.

***** ДОБАВЛЕНО ПОСЛЕ ВАШЕГО КОММЕНТАРИЯ / ВОПРОСА *****

Я вошел в Power Query и открыл запросэто было создано из вышеупомянутой деятельности.Затем я изменил "http://www.goo-net-exchange.com/catalog/NISSAN__BLUEBIRD/" в строке «Исходный» на Site, поэтому строка теперь выглядит так: Source = Web.Page(Web.Contents(Site)),.

Затем я вставил эти две строки над исходной строкой в ​​коде, сохраняя при этом исходную строкуна месте (так что теперь есть две строки):

let 
Source = (Site) =>

Затем я вставил эти две строки ниже оригинальной последней строки кода:

in
Source

Эти четыре строки преобразовали то, чтоРаньше у меня была функция.

Затем я переименовал свой запрос в CarSites ... только потому, что мне так хотелось.

Затем я убедился, что все было сохранено и возвращено в Excel.

В Excel я создал новую таблицу с URL-адресами трех ваших сайтов:

enter image description here

Я назвал таблицу Table1.

Затем я щелкнул по таблице (Table1), а затем по Data> From Table, чтобы создать другой запрос в Power Query из этой таблицы.

Затем я щелкнул «Добавить столбец»> «Вызов пользовательской функции» и настроил следующие записи, как показано ниже, и нажал «ОК»:

enter image description here

Это дало мне следующее:

enter image description here

Каждая таблица в столбце CarSites - это коллекция добавленных таблиц для каждого сайта, указанного в столбце LinkURL (как у вас былодля сайта Nissan BlueBird раньше).Вы можете удалить столбец LinkURL и развернуть столбец CarSites, чтобы получить один добавленный столбец для всех сайтов.

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

Вы захотите выполнить эту работу в функции.

Удачи!

Если это поможет, вот мой М-код:

Для функции CarSites:

let 
Source = (Site) =>
let
Source = Web.Page(Web.Contents(Site)),
#"Filtered Rows" = Table.SelectRows(Source, each ([Source] = "Table")),
#"Removed Other Columns" = Table.SelectColumns(#"Filtered Rows",{"Data"}),
#"Expanded Data" = Table.ExpandTableColumn(#"Removed Other Columns", "Data", {"Column1", "Column2", "Column3", "Column4", "Column5", "Column6", "Column7", "Column8", "MODEL TYPE", "MODEL", "ENGINE", "DOOR", "T/M DRIVE", "Dimension", "WEIGHT", "MSRP", "Find Used Cars"}, {"Column1", "Column2", "Column3", "Column4", "Column5", "Column6", "Column7", "Column8", "MODEL TYPE", "MODEL", "ENGINE", "DOOR", "T/M DRIVE", "Dimension", "WEIGHT", "MSRP", "Find Used Cars"})
in
#"Expanded Data"
in
Source

И для запроса Table1:

let
Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
#"Invoked Custom Function" = Table.AddColumn(Source, "CarSites", each CarSites([LinkURL]))
in
#"Invoked Custom Function"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...