如何通过能力查询在多个网站中提取多个表

时间:2019-02-28 18:04:12

标签: excel database powerbi powerquery

想知道通过强大的查询来提取网站中的数据表,这些表具有相同的标题,并且多个网站具有相同的表结构。

需要知道代码

2 个答案:

答案 0 :(得分:0)

如果我对您的理解正确,这可能会有所帮助。这样将从goo-net-exchange.com/catalog/NISSAN__BLUEBIRD网站上的所有表中获取所有数据,并将它们附加在一个表中。

在Power Query中,单击“主页”>“新来源”>“其他来源”>“ Web”。然后输入您的链接,然后单击确定:

enter image description here

然后单击文件夹,然后单击确定。

enter image description here

然后过滤掉不是表的源。

enter image description here

然后右键单击“数据”列的标题并删除“其他列”。

enter image description here

enter image description here

然后单击enter image description here以展开所有表。

enter image description here

单击确定。

*****在评论/问题后添加*****

我进入了Power Query,并打开了根据上述活动创建的查询。然后我将“源代码”行中的"http://www.goo-net-exchange.com/catalog/NISSAN__BLUEBIRD/"更改为Site,因此该行现在显示为:Source = Web.Page(Web.Contents(Site)),

然后我在代码的原始let上方插入这两行,仍然将原始let保留在原处(因此现在有两行let):

let 
Source = (Site) =>

然后我将这两行插入到代码的原始最后一行下面:

in
Source

这四行代码将我以前拥有的内容转换为一个函数。

接下来,我将查询重命名为CarSites ...只是因为我喜欢它。

然后,我确保所有内容都已保存并返回到Excel。

在Excel中,我用您三个网站的URL创建了一个新表:

enter image description here

我将表命名为Table1。

然后,我单击表(Table1),然后单击“数据”>“从表”以在Power Query中从该表创建另一个查询。

然后,我单击添加列>调用自定义函数,并在下面设置类似这样的条目,然后单击确定:

enter image description here

它给了我这个:

enter image description here

CarSites列中的每个表都是LinkURL列中列出的每个站点的附加表的集合(就像您以前使用过Nissan BlueBird站点一样)。您可以删除LinkURL列并展开CarSites列,以获取所有网站的一个附加列。

根据我从表格信息中看到的内容,您仍然需要做一些工作来清理您提取的该信息。例如,这些表不能轻易地指出每条线提供有关哪个汽车和年份的信息。您需要弄清楚如何将名称和年份映射到每一行。

您将要在函数中完成该工作。

祝你好运!

如果有帮助,这是我的M代码:

对于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"

答案 1 :(得分:0)

在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” 然后导入包含您所有网址的表格,并使用

向其中添加一个自定义列
Q(Name of column with urls)

如果PQ要求,您可能必须将“隐私”级别设置为“公开”。

然后展开添加的列。就是这样。