Web.BrowserContents
该表由在浏览器中运行的 javascript 构建。它在 Power Query 打开 URL 时不会运行,因此表永远不会呈现并且 Power Query 无法访问
函数Web.BrowserContents 旨在处理这个问题。例如:
Web.BrowserContents("https://microsoft.com", [
WaitFor = [
Selector = "div.ready",
Timeout = #duration(0,0,0,10) ]
])
查找选择器
将RowSelector 视为选择表格行
然后对于每一行,使用columnSelectors 选择“列”。当 Power Query 循环时,这些选择器会组合在一起,为您提供网页中类似表格的数据的单个 cell。你可以使用任何东西,比如divs 的列表。
Power BI 具有自动检测表的选项。如果你使用 CSS 选择器,你可以更精确。
在浏览器中测试选择器
在您的浏览器控制台(如 Firefox)中输入 $$("tr.player-row")。然后将鼠标悬停在十字准线上以查看选择器将匹配哪些列。
解决方案
let
UseLocalCache = true,
Source_Web = "https://www.fantasypros.com/nfl/rankings/rookies.php",
Source_Local = "file:///C:/temp/rookies.html",
Response =
if not UseLocalCache
then Web.BrowserContents( Source_Web )
else File.Contents( Source_Local ),
columnSelectors = {
{ "Player", "tr.player-row :nth-child(3)" },
{ "Rank", "tr.player-row :nth-child(1)" },
{ "Worst", "tr.player-row :nth-child(6)" },
{ "Avg", "tr.player-row :nth-child(7)" },
{ "Std. Dev.", "tr.player-row :nth-child(8)" }
},
// sometimes you need to also declare the function if it didn't automatically coerce right
// { "Rank", "tr.player-row :nth-child(1)", each _ },
rowSelector =
[RowSelector = "tr.player-row"],
table_stats = Html.Table( Response, columnSelectors, rowSelector ),
#"Changed Type" = Table.TransformColumnTypes(
table_stats,
{{"Rank", Int64.Type}, {"Worst", Int64.Type},
{"Avg", type number}, {"Std. Dev.", type number}}
),
#"Sorted Rows" = Table.Sort(#"Changed Type",
{{"Rank", Order.Ascending}} )
in
#"Sorted Rows"
如果您离线保存文件,则可以更快地测试您的查询。你可以用UseLocalCache切换它