Excel 如何通过power query在多个网站中提取多个表

Excel 如何通过power query在多个网站中提取多个表,excel,database,powerbi,powerquery,Excel,Database,Powerbi,Powerquery,想知道如何通过power query提取网站中的数据表,这些表具有相同的标题和多个具有相同表结构的网站 需要知道代码如果我理解正确,这可能会有所帮助。这将从网站goo-net-exchange.com/catalog/NISSAN__;u BLUEBIRD上的所有表中获取所有数据,并将其附加到一个表中 在Power Query中,单击主页>新建源>其他源>Web。然后输入链接并单击“确定”: 然后单击文件夹并单击“确定” 然后过滤掉不是表的源 然后右键单击数据列的标题并删除其他列 然后单击展开所

想知道如何通过power query提取网站中的数据表,这些表具有相同的标题和多个具有相同表结构的网站


需要知道代码

如果我理解正确,这可能会有所帮助。这将从网站goo-net-exchange.com/catalog/NISSAN__;u BLUEBIRD上的所有表中获取所有数据,并将其附加到一个表中

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

然后单击文件夹并单击“确定”

然后过滤掉不是表的源

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

然后单击展开所有表

单击“确定”

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

我进入Power Query并打开了根据上述活动创建的查询。然后我改变了http://www.goo-net-exchange.com/catalog/NISSAN__BLUEBIRD/ 在站点的源代码行中,该行现在显示为:Source=Web.PageWeb.ContentsSite

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

let 
Source = (Site) =>
然后我在代码的原始最后一行下面插入了这两行:

in
Source
这四行代码将我之前拥有的转换为一个函数

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

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

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

我把表格命名为Table1

然后我单击表Table1,然后单击Data>From表,在Power query中从该表创建另一个查询

然后我单击Add Column>Invoke Custom Function,设置如下条目,然后单击OK:

它给了我这个:

CarSites列中的每个表都是LinkURL列中列出的每个站点的附加表的集合,就像您之前为日产蓝鸟站点所做的那样。您可以删除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"

在PQ中创建空查询,转到高级编辑器,按Ctrl-A,然后粘贴此文本:

=url=>let Source=Web.PageWeb.Contentsurl, Custom1=Table.SelectRowsSource,每个值.Is[Data],输入Table和Table.RowCount[Data]>0和List.FirstTable.ColumnNames[Data]=MODEL type, Expanded Data=let c=List.AccumerateTable.ColumnNamesList.FirstCustom1[Data],{{},{},s,c=>{s{0}&{c},s{1}&{Data。&c}在Table.ExpandTableColumnCustom1中,数据,c{0},c{1} 在里面 扩展数据

将查询命名为,例如Q 然后导入一个包含所有URL的表,并使用

Q(Name of column with urls)
如果PQ要求,您可能必须为公众设置隐私级别


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

您需要向我们提供更多信息。到底是什么给你带来了麻烦?到目前为止,你试图解决什么问题?你能给我们网站吗?你想得到的数据是什么?@RyanB。谢谢你的帮助。谢谢你的帮助。我需要从多个网站提取数据,每个网站都有多个表。现在我已经能够从不同的网站中提取信息,但我能够在每个网站中提取一个表。我已经用这种方法来废弃数据了。以下是示例网站-,我需要一种方法来提取这些URL中的所有表。标题是相同的。非常感谢您的帮助。您好@marc,上述方法的问题是,大约有100多个网站有不同的车型,所以如果我使用上述方法,将需要很长时间。有没有什么方法可以让我们一次列出所有的URL,并提取每个网站中的所有表格。请让我知道。非常感谢你的帮助。非常感谢。我在上一个答案的末尾添加了更多内容,以解决自动从多个站点获取信息的问题。嗨,马克,非常感谢你对我的帮助。我试试这个,应该有用。太棒了。嘿@Andey非常感谢你帮了我。你节省了我的时间。再次感谢。