|
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件 ★ 免费下载 ★ ★ 使用帮助★
因为网页结构非常复杂,并不是每种结构是适用一个模板,我也是多次尝试后才能确定下来。一般来说,但凡Text.FromBinary能解析处网页源码,就是说明我们确实得到数据了,至于能否用Web.Page来解析的话,这个看实际情况了,对于本例而言是不能的,只能用Power Query的数据清洗功能。事实上,如果你用Power BI的Power Query效果会更好,里面有更加强大的Web.BrowserContents和Html.Table,这个两个解析函数都是Excel中阉割的Power Query所没有的,而且还可以借助css选择器来选择。下面附上我针对此列的解决方案:
- let
- get_data=(x)=>
- let
- url="https://www.finmart.com.tw/join/ProjectList",
- headers=[#"Content-Type"="application/x-www-form-urlencoded; charset=UTF-8",Referer="https://www.finmart.com.tw/join/Online"],
- content="status=2&page="&Text.From(x)&"&orderType=03",
- web=Text.FromBinary(Web.Contents(url,[Headers=headers,Content=Text.ToBinary(content)])),
- 分离 = Table.FromColumns({Text.SplitAny(web,"><")}),
- 筛选 = Table.SelectRows(分离, each not Text.Contains([Column1], "span") and not Text.Contains([Column1], "div") and not Text.Contains([Column1], "/p") and not Text.Contains([Column1], "class")),
- 删字 = Table.TransformColumns(筛选,{{"Column1", Text.Trim, type text}}),
- 去空 = Table.SelectRows(删字, each ([Column1] <> "")),
- 分组 = Table.Group(去空,"Column1",{"tb",each let tb=Table.FromColumns(List.Split({"状态"}&[Column1],2)),sl=Table.TransformColumns(tb,{"Column3",each if List.Contains({"一".."龟"},Text.Start(_,1)) then "名称" else tb[Column3]{0}&_&"号"}) in Table.PromoteHeaders(sl)},0,(x,y)=>Number.From(y="發電中")),
- 修正 = Table.TransformColumns(Table.Combine(分组[tb]),{"預估內部報酬率",each _&"%"}),
- 改类型 = Table.TransformColumnTypes(修正,{{"預估內部報酬率", Percentage.Type}})
- in
- 改类型,
- 数据=Table.Combine(List.Transform({1..4},get_data))
- in
- 数据
复制代码
|
|