Страницы: 1
RSS
Собрать таблицу средствами Power Query
 
Здравствуйте. Помогите, пожалуйста с кодом для Power Query. Есть список урлов. Нужно извлечь данные с урлов и сохранить их в таблицу в таком виде.
 
Это мой код, он работает, но не решает задачу полностью. Основная (но, не единственная) проблема кода — обращение по 1 URL, а нужно по списку. Файл с кодом и результатом → pq.xlsx (20 КБ)
Код
let
    Источник = Web.Page(Web.Contents("https://www.acer.com/datasheets/2018/4876/P2510-G2-MG/NX.VGXER.017.html")),
    Data0 = Источник{0}[Data],
    #"Развернутый элемент Children" = Table.ExpandTableColumn(Data0, "Children", {"Kind", "Name", "Children", "Text"}, {"Kind.1", "Name.1", "Children.1", "Text.1"}),
    #"Развернутый элемент Children.1" = Table.ExpandTableColumn(#"Развернутый элемент Children", "Children.1", {"Kind", "Name", "Children", "Text"}, {"Kind.2", "Name.2", "Children", "Text.2"}),
    #"Развернутый элемент Children1" = Table.ExpandTableColumn(#"Развернутый элемент Children.1", "Children", {"Kind", "Name", "Children", "Text"}, {"Kind.3", "Name.3", "Children.1", "Text.3"}),
    #"Развернутый элемент Children.2" = Table.ExpandTableColumn(#"Развернутый элемент Children1", "Children.1", {"Kind", "Name", "Children", "Text"}, {"Kind.4", "Name.4", "Children", "Text.4"}),
    #"Развернутый элемент Children2" = Table.ExpandTableColumn(#"Развернутый элемент Children.2", "Children", {"Kind", "Name", "Children", "Text"}, {"Kind.5", "Name.5", "Children.1", "Text.5"}),
    #"Развернутый элемент Children.3" = Table.ExpandTableColumn(#"Развернутый элемент Children2", "Children.1", {"Kind", "Name", "Children", "Text"}, {"Kind.6", "Name.6", "Children", "Text.6"}),
    #"Развернутый элемент Children3" = Table.ExpandTableColumn(#"Развернутый элемент Children.3", "Children", {"Kind", "Name", "Children", "Text"}, {"Kind.7", "Name.7", "Children.1", "Text.7"}),
    #"Развернутый элемент Children.4" = Table.ExpandTableColumn(#"Развернутый элемент Children3", "Children.1", {"Kind", "Name", "Children", "Text"}, {"Kind.8", "Name.8", "Children", "Text.8"}),
    #"Развернутый элемент Children4" = Table.ExpandTableColumn(#"Развернутый элемент Children.4", "Children", {"Kind", "Name", "Children", "Text"}, {"Kind.9", "Name.9", "Children.1", "Text.9"}),
    #"Развернутый элемент Children.5" = Table.ExpandTableColumn(#"Развернутый элемент Children4", "Children.1", {"Kind", "Name", "Children", "Text"}, {"Kind.10", "Name.10", "Children", "Text.10"}),
    #"Развернутый элемент Children5" = Table.ExpandTableColumn(#"Развернутый элемент Children.5", "Children", {"Kind", "Name", "Children", "Text"}, {"Kind.11", "Name.11", "Children.1", "Text.11"}),
    #"Развернутый элемент Children.6" = Table.ExpandTableColumn(#"Развернутый элемент Children5", "Children.1", {"Kind", "Name", "Children", "Text"}, {"Kind.12", "Name.12", "Children", "Text.12"}),
    #"Удаленные столбцы" = Table.RemoveColumns(#"Развернутый элемент Children.6",{"Kind", "Name", "Kind.1", "Name.1", "Kind.2", "Name.2", "Kind.3", "Name.3", "Kind.4", "Name.4", "Kind.5", "Name.5", "Kind.6", "Name.6", "Kind.7", "Name.7", "Kind.8", "Name.8", "Kind.9", "Name.9", "Kind.10", "Name.10", "Kind.11", "Name.11", "Kind.12", "Name.12", "Children", "Text.7", "Text.6", "Text.5", "Text.4", "Text.3", "Text.2", "Text.1", "Text", "Text.9"}),
    #"Замененное значение" = Table.ReplaceValue(#"Удаленные столбцы",null,"",Replacer.ReplaceValue,{"Text.12", "Text.11", "Text.10", "Text.8"}),
    #"Добавлен пользовательский объект" = Table.AddColumn(#"Замененное значение", "Пользовательская", each [Text.12]&[Text.11]&[Text.10]&[Text.8]),
    #"Удаленные столбцы1" = Table.RemoveColumns(#"Добавлен пользовательский объект",{"Text.12", "Text.11", "Text.10", "Text.8"}),
    #"Строки с примененным фильтром" = Table.SelectRows(#"Удаленные столбцы1", each ([Пользовательская] <> ""))
in
    #"Строки с примененным фильтром"
Изменено: ezdorov - 27.11.2019 20:58:34
 
ezdorov, пять минут подождите
вот как запрос Document (2) сделать функцией?
 
Цитата
artyrH написал:
вот как запрос Document (2) сделать функцией?
Спрашивали? Отвечаем, специально для вашей мышкоклацательной души все делаем ей - хвостатой  ;) :
Итак, для начала создаем параметр, и в него пишем адрес из вашего запроса. Если в функцию нужно будет передавать больше аргументов, то параметров нужно будет делать по количеству аргументов (названия параметров - это на ваш вкус).

Потом жмем сюда:

потом сюда:

и сюда:

Это подготовка теперь тыкаем ПКМ сюда:

И выбираем пункт "Создать функцию" и придумываем для нее название (аналогично какое захотите). И вуаля, функция готова, можете вызывать её где вздумается как любую другую.
Обратите внимание, что созданная таким образом функция становится связанной с запросом-родителем, и при внесении изменений в него, они автоматически вносятся и в функцию.
Успехов в познании.
Изменено: PooHkrd - 28.11.2019 09:47:09 (подправил синтаксис и пунктуацию :))
Вот горшок пустой, он предмет простой...
 
PooHkrd, спасибо большое. этот способ не знал. знал как вручную править, только редко когда делал. потому и забылось, а когда надо не смог сделать.
 
artyrH, спасибо! Однако в вашей редакции файла (искал на Лист3) не обнаружил столбцов — url, null, Part Number, Colour (его нет в источнике, поэтому можно записать null) и Package Contents. Итоговая таблица получилась избыточной с одной стороны, и в ней нет нужных столбцов с другой. Но, всё равно спасибо за участие. Если будут идеи, как улучшить, пожалуйста напишите. Для меня актуально, ищу решения.
Изменено: ezdorov - 28.11.2019 10:31:07
 
ezdorov, вечером изменю
 
Цитата
ezdorov написал:
не обнаружил столбцов — url, null, Part Number, Colour (его нет в источнике, поэтому можно записать null) и Package Contents
что нашлось - то в таблице.
разбирайте запрос, добавьте что не хватает.
между прочим вы можете свой запрос сделать функцией и применить ко всем ссылкам
Изменено: artyrH - 28.11.2019 19:00:58
 
artyrH, спасибо! Применил инструкцию от PooHkrd. Теперь есть параметр и функция. artyrH, PooHkrd, научите пожалуйста вызывать функцию PooHkrdFunction с динамической подстановкой параметра URLparam в цикле. Обновлённая редакция файла pq.xlsx (19.13 КБ).
 
ezdorov, осталось только развернуть. при разворачивании проследите чтоб были имена всех столбов
 
Цитата
ezdorov написал:
научите пожалуйста вызывать функцию
Если учесть что у вас цикл организован через таблицу со списком УРЛов в строках, то для этого есть специательная кнопка:
Вот горшок пустой, он предмет простой...
 
artyrH, спасибо за помощь!
 
Цитата
PooHkrd написал:
у вас цикл организован через таблицу со списком УРЛов в строках
PooHkrd, в моей редакции файла → pq.xlsx (19.13 КБ) нет таблицы со списком УРЛов. Помогите разобраться (пару вопросов).
  1. Список УРЛов нужно размещать на листах Excel или внутри редактора Power Qwery?
  2. Как связать функцию и параметр со списком УРЛов?
 
Цитата
ezdorov написал:
нет таблицы со списком УРЛов
сделайте еще запрос за урлами в файл .txt
еще вариант
Код
let
   func=
(filepath)=>
let
    a=Web.Contents(filepath),
    Источник = Table.FromColumns({Lines.FromBinary(a, null, null, 65001)}),
    Duplicat = Table.DuplicateColumn(Источник, "Column1", "Column2"),
    Custom = Table.TransformColumns(Duplicat, {"Column1", each if 
                 Text.Contains(_, "class=""att"">") then 
                  Text.BetweenDelimiters(_, "class=""att"">", "</p>") else if 
                 Text.Contains(_, "p class=""pn"">") then 
                  Text.BetweenDelimiters(_, "p class=""pn"">", ":") else null}),
    custom = Table.TransformColumns(Custom, {"Column2", each if 
                 Text.Contains(_, "p class=""mt0"">") then 
                  Text.BetweenDelimiters(_, "p class=""mt0"">", "</p>") else if  
                 Text.Contains(_, "</li>") then   
                  Text.BetweenDelimiters(_, "<li>", "</li>") else if  
                 Text.Contains(_, "class=""mdn"">") then 
                  Text.BetweenDelimiters(_, "class=""mdn"">", "</h1>") else if 
                 Text.Contains(_, "p class=""pn"">Part Number:") then 
                  Text.BetweenDelimiters(_, "p class=""pn"">Part Number:", "</p>") else null}),
     Filled = Table.FillDown(custom,{"Column1"}),
    Filtered = Table.SelectRows(Filled, each [Column2] <> null and [Column2] <> ""),
    Transposed = Table.Transpose(Filtered),
    Headers = Table.PromoteHeaders(Transposed, [PromoteAllScalars=true])
in
    Headers,
    a=Excel.CurrentWorkbook(),
    Таблица2 = a{[Name="Таблица2"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Таблица2,{{"Столбец1", type text}}),
    #"Added Custom" = Table.AddColumn(#"Changed Type", "a", each func([Столбец1])),
    #"Removed Errors" = Table.RemoveRowsWithErrors(#"Added Custom", {"a"}),
    #"Expanded {0}" = Table.ExpandTableColumn(#"Removed Errors", "a", {"Column1", "Part Number", "Processor Manufacturer", "Processor Type", "Processor Generation", "Processor Model", "Processor Speed", "Maximum Turbo Speed", "Processor Core", "Cache", "Direct Media Interface", "64-bit Processing", "Hyper-Threading", "vPro Technology", "Standard Memory", "Memory Technology", "Memory Card Reader", "Memory Card Supported", "Memory Card Supported_1", "Total Solid State Drive Capacity", "Solid State Drive Interface", "Optical Drive Type", "Screen Size", "Display Screen Type", "Display Screen Technology", "Aspect Ratio", "Screen Mode", "Screen Resolution", "Backlight Technology", "Touchscreen", "Multi-touch Screen", "Graphics Controller Manufacturer", "Graphics Controller Model", "Graphics Memory Technology", "Graphics Memory Accessibility", "TV Card", "Wireless LAN", "Wireless LAN Standard", "Bluetooth", "Front Camera/Webcam", "Front Camera/Webcam Video Resolution", "Microphone", "Number of Microphones", "Finger Print Reader", "Speakers", "Number of Speakers", "Sound Mode", "HDMI", "Total Number of USB Ports", "Number of USB 2.0 Ports", "Number of USB 3.0 Ports", "USB Type-C", "Audio Line Out", "Operating System Platform", "Operating System", "Keyboard", "Keyboard Backlight", "Pointing Device Type", "Pointing Device Type_2", "TouchPad Features", "Number of Cells", "Battery Chemistry", "Battery Capacity", "Maximum Power Supply Wattage", "Colour", "Form Factor", "Height (Front)", "Height (Rear)", "Height", "Width", "Depth", "Weight (Approximate)", "Package Contents", "Package Contents_3", "Package Contents_4", "Package Contents_5", "Maximum Memory", "Solid State Drive Configuration", "Digitizer", "Wireless LAN Manufacturer", "Wireless LAN Model", "Bluetooth Standard", "Sensor Type", "Number of USB 3.1 Gen 1 Ports", "Operating System Architecture", "Keyboard Localization", "Battery Energy", "Maximum Battery Run Time", "Burst Frequency", "HDCP Supported", "USB Type-C Detail", "Headphone/Microphone Combo Port", "Package Contents_1", "Package Contents_2", "Security Features", "Security Features_3", "Security Features_4", "Security Features_5", "Number of Total Memory Slots", "Total Hard Drive Capacity", "Hard Drive Interface", "Hard Drive RPM", "Hard Drive Configuration", "Ethernet Technology", "Network (RJ-45)", "Certifications & Standards", "Security Features_6", "Number of Touch Points", "Graphics Memory Capacity", "Rear Camera", "Rear Camera Resolution", "Focus Modes", "Sensor Type_2", "Sensor Type_3", "Sensor Type_4", "Number of USB 3.1 Gen 2 Ports", "Keyboard Type", "Pointing Device Type_5", "Maximum Video Battery Time", "Height with Dock", "Width with Dock", "Depth with Dock", "Weight without Dock (Approximate)", "Weight with Dock (Approximate)", "Package Contents_6", "Package Contents_7", "Package Contents_8", "Package Contents_9", "Package Contents_10", "Security Features_11", "Security Features_12", "Security Features_13", "Display Screen Technology_1", "Near Field Communication", "Microphone Type", "VGA", "Security Features_7", "Security Features_8", "Security Features_9", "Number of USB 3.1 Gen 1 Type-A Ports", "Number of USB 3.1 Gen 1 Type-C Ports", "Maximum Web Surfing Battery Time", "Features", "USB Type-C Detail_2", "Cellular Network Supported", "Cellular Data Connectivity Technology", "Cellular Data Connectivity Technology_2", "Cellular Data Connectivity Technology_3", "Cellular Data Connectivity Technology_4", "GPS", "WWAN Supported", "Docking Connector Type", "Front Camera/Webcam Resolution", "Numeric Pad"}, {"Column1", "Part Number", "Processor Manufacturer", "Processor Type", "Processor Generation", "Processor Model", "Processor Speed", "Maximum Turbo Speed", "Processor Core", "Cache", "Direct Media Interface", "64-bit Processing", "Hyper-Threading", "vPro Technology", "Standard Memory", "Memory Technology", "Memory Card Reader", "Memory Card Supported", "Memory Card Supported_1", "Total Solid State Drive Capacity", "Solid State Drive Interface", "Optical Drive Type", "Screen Size", "Display Screen Type", "Display Screen Technology", "Aspect Ratio", "Screen Mode", "Screen Resolution", "Backlight Technology", "Touchscreen", "Multi-touch Screen", "Graphics Controller Manufacturer", "Graphics Controller Model", "Graphics Memory Technology", "Graphics Memory Accessibility", "TV Card", "Wireless LAN", "Wireless LAN Standard", "Bluetooth", "Front Camera/Webcam", "Front Camera/Webcam Video Resolution", "Microphone", "Number of Microphones", "Finger Print Reader", "Speakers", "Number of Speakers", "Sound Mode", "HDMI", "Total Number of USB Ports", "Number of USB 2.0 Ports", "Number of USB 3.0 Ports", "USB Type-C", "Audio Line Out", "Operating System Platform", "Operating System", "Keyboard", "Keyboard Backlight", "Pointing Device Type", "Pointing Device Type_2", "TouchPad Features", "Number of Cells", "Battery Chemistry", "Battery Capacity", "Maximum Power Supply Wattage", "Colour", "Form Factor", "Height (Front)", "Height (Rear)", "Height", "Width", "Depth", "Weight (Approximate)", "Package Contents", "Package Contents_3", "Package Contents_4", "Package Contents_5", "Maximum Memory", "Solid State Drive Configuration", "Digitizer", "Wireless LAN Manufacturer", "Wireless LAN Model", "Bluetooth Standard", "Sensor Type", "Number of USB 3.1 Gen 1 Ports", "Operating System Architecture", "Keyboard Localization", "Battery Energy", "Maximum Battery Run Time", "Burst Frequency", "HDCP Supported", "USB Type-C Detail", "Headphone/Microphone Combo Port", "Package Contents_1", "Package Contents_2", "Security Features", "Security Features_3", "Security Features_4", "Security Features_5", "Number of Total Memory Slots", "Total Hard Drive Capacity", "Hard Drive Interface", "Hard Drive RPM", "Hard Drive Configuration", "Ethernet Technology", "Network (RJ-45)", "Certifications & Standards", "Security Features_6", "Number of Touch Points", "Graphics Memory Capacity", "Rear Camera", "Rear Camera Resolution", "Focus Modes", "Sensor Type_2", "Sensor Type_3", "Sensor Type_4", "Number of USB 3.1 Gen 2 Ports", "Keyboard Type", "Pointing Device Type_5", "Maximum Video Battery Time", "Height with Dock", "Width with Dock", "Depth with Dock", "Weight without Dock (Approximate)", "Weight with Dock (Approximate)", "Package Contents_6", "Package Contents_7", "Package Contents_8", "Package Contents_9", "Package Contents_10", "Security Features_11", "Security Features_12", "Security Features_13", "Display Screen Technology_1", "Near Field Communication", "Microphone Type", "VGA", "Security Features_7", "Security Features_8", "Security Features_9", "Number of USB 3.1 Gen 1 Type-A Ports", "Number of USB 3.1 Gen 1 Type-C Ports", "Maximum Web Surfing Battery Time", "Features", "USB Type-C Detail_2", "Cellular Network Supported", "Cellular Data Connectivity Technology", "Cellular Data Connectivity Technology_2", "Cellular Data Connectivity Technology_3", "Cellular Data Connectivity Technology_4", "GPS", "WWAN Supported", "Docking Connector Type", "Front Camera/Webcam Resolution", "Numeric Pad"})
in
    #"Expanded {0}"
 
Цитата
artyrH написал:
сделайте еще запрос за урлами в файл .txt
artyrH, отличный вариант! А как сделать запрос за урлами в txt-файл?
 
Из файла-Из текстового или CSV-файла
Страницы: 1
Наверх