如何在PowerQuery中通过Html.Table提取img标签的src属性?
解决PowerQuery提取HTML中img标签src属性的问题
你之前尝试的img@src、url(img)不符合PowerQuery的语法规则——Html.Table的列选择器仅支持标准CSS选择器选取元素,无法直接提取属性。要获取src属性,需结合PowerQuery内置函数实现,以下是两种可行方案:
方案一:直接在Html.Table中扩展列定义
修改原查询,新增一列并通过函数逻辑提取src属性:
= Html.Table(Source, { {"Title", ".idea-heading"}, {"Description", ".ng-binding.idea-desc"}, {"Last updated", ".sr-only"}, {"Status", ".state-icon + *"}, {"Votes", ".ng-binding:nth-child(5)"}, {"Idea categories", ".idea-category"}, {"Image Src", each Html.AttributeValue(Html.Select(_, "img"), "src")} }, [RowSelector="LI"])
each表示对当前行的DOM元素执行后续逻辑Html.Select(_, "img")从当前行元素中选中目标img标签Html.AttributeValue(元素, "src")提取该元素的src属性
如果单一行包含多个img标签,可改用Html.SelectAll获取所有标签,再按需处理(比如取第一个或合并所有src):
{"Image Srcs", each Text.Combine(List.Transform(Html.SelectAll(_, "img"), (img) => Html.AttributeValue(img, "src")), ", ")}
方案二:拆分步骤灵活处理
若DOM结构复杂,可先提取所有行元素,再逐行提取各字段及图片属性:
let Source = /* 你的原始HTML数据源 */, // 提取所有行元素 Rows = Html.Select(Source, "LI"), // 遍历行元素,转换为表格记录 ConvertToTable = Table.FromRecords(List.Transform(Rows, (row) => [ Title = Html.Table(row, {{"", ".idea-heading"}}){0}[Column1], Description = Html.Table(row, {{"", ".ng-binding.idea-desc"}}){0}[Column1], LastUpdated = Html.Table(row, {{"", ".sr-only"}}){0}[Column1], Status = Html.Table(row, {{"", ".state-icon + *"}}){0}[Column1], Votes = Html.Table(row, {{"", ".ng-binding:nth-child(5)"}}){0}[Column1], IdeaCategories = Html.Table(row, {{"", ".idea-category"}}){0}[Column1], ImageSrc = Html.AttributeValue(Html.Select(row, "img"), "src") ])) in ConvertToTable
内容的提问来源于stack exchange,提问作者Hauke P.
相关产品推荐
相关产品推荐

