想知道通过强大的查询来提取网站中的数据表,这些表具有相同的标题,并且多个网站具有相同的表结构。
需要知道代码
答案 0 :(得分:0)
如果我对您的理解正确,这可能会有所帮助。这样将从goo-net-exchange.com/catalog/NISSAN__BLUEBIRD网站上的所有表中获取所有数据,并将它们附加在一个表中。
在Power Query中,单击“主页”>“新来源”>“其他来源”>“ Web”。然后输入您的链接,然后单击确定:
然后单击文件夹,然后单击确定。
然后过滤掉不是表的源。
然后右键单击“数据”列的标题并删除“其他列”。
单击确定。
*****在评论/问题后添加*****
我进入了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创建了一个新表:
我将表命名为Table1。
然后,我单击表(Table1),然后单击“数据”>“从表”以在Power Query中从该表创建另一个查询。
然后,我单击添加列>调用自定义函数,并在下面设置类似这样的条目,然后单击确定:
它给了我这个:
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要求,您可能必须将“隐私”级别设置为“公开”。
然后展开添加的列。就是这样。