【问题标题】:Power Query Help - HTML TablesPower Query 帮助 - HTML 表
【发布时间】:2021-05-03 05:25:06
【问题描述】:

谁能帮我通过 Power Query 将此表导入 Excel。无论我如何尝试遵循“检查”的路径,我似乎都无法到达桌面。

https://www.fantasypros.com/nfl/rankings/rookies.php

让 来源 = Web.Page(Web.Contents("https://www.fantasypros.com/nfl/rankings/rookies.php")), 数据 = 来源{1}[数据], 孩子 = 数据{0}[孩子], Children1 = 儿童{1}[儿童], 孩子 2 = 孩子 1{5}[孩子], 孩子 3 = 孩子 2{4}[孩子], 孩子 4 = 孩子 3{0}[孩子], 孩子 5 = 孩子 4{0}[孩子], 儿童6 = 儿童5{2}[儿童], 孩子 7 = 孩子 6{0}[孩子] 在 儿童7

【问题讨论】:

  • 该表是由在浏览器中运行的 javascript 构建的。它不会在 Power Query 打开 URL 时运行,因此该表永远不会呈现并且 Power Query 无法访问。

标签: powerquery


【解决方案1】:

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切换它

【讨论】:

  • 感谢您的回复。不幸的是,我认为 Web.BrowserContents 在我的 PQ 版本中不起作用: Expression.Error: The name 'Web.BrowserContents' was not respected.确保拼写正确。
  • 您是否可以访问 Powershell、Python 或其他任何东西?有时让他们完成工作会更容易,然后导出到csv 进行导入。 -- 对于python,请查看BeautifulSoup
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多