首页 > 解决方案 > 使用 Floki 访问 html 属性

问题描述

我正在尝试从我用Floki 抓取的 HTML 正文中获取图像。现在身体是

[
  {"div", [{"class", "a-cover-image"}, {"data-state", "not-initialised"}],
   [
     {"div",
      [
        {"class", "content"},
        {"data-image",
         "/sites/default/files/legacy/khloe-kardashian-anxiety-pregnancy.png"},
        {"data-text", "A photo of Khloe Kardashian dressed up for a night out"}
      ],
      [
        {"div",
         [
           {"class", "a-cover-image__cover a-cover-image__cover-loading-inner"},
           {"style",
            "background-image: url('/sites/default/files/legacy/khloe-kardashian-anxiety-pregnancy.png')"}
         ], []}
      ]},
     {"div",
      [
        {"class", "a-cover-image__cover a-cover-image__cover-small"},
        {"data-image",
         "/sites/default/files/styles/1x1/public/legacy/khloe-kardashian-anxiety-pregnancy.png?itok=agZilCJ6"},
        {"data-text", "A photo of Khloe Kardashian dressed up for a night out"},
        {"data-height", ""},
        {"data-width", ""}
      ], []},
     {"div",
      [
        {"class", "a-cover-image__cover a-cover-image__cover-medium"},
        {"data-image",
         "/sites/default/files/styles/3x2/public/legacy/khloe-kardashian-anxiety-pregnancy.png?itok=tnPqQNhC"},
        {"data-text", "A photo of Khloe Kardashian dressed up for a night out"},
        {"data-height", ""},
        {"data-width", ""}
      ], []},
     {"div",
      [
        {"class", "a-cover-image__cover a-cover-image__cover-large"},
        {"data-image",
         "/sites/default/files/styles/16x9/public/legacy/khloe-kardashian-anxiety-pregnancy.png?itok=YgdCfuT2"},
        {"data-text", "A photo of Khloe Kardashian dressed up for a night out"},
        {"data-height", ""},
        {"data-width", ""}
      ], []},
     {"div",
      [
        {"class", "a-cover-image__cover a-cover-image__cover-xl"},
        {"data-image",
         "/sites/default/files/styles/16x9/public/legacy/khloe-kardashian-anxiety-pregnancy.png?itok=YgdCfuT2"},
        {"data-text", "A photo of Khloe Kardashian dressed up for a night out"},
        {"data-height", ""},
        {"data-width", ""}
      ], []}
   ]}
]

所以我试图从中得到data-imagea-cover-image__cover-small我知道我可以像这样从身体中得到那个元素

body |> Floki.find(".a-cover-image__cover-small")输出将是

[
  {"div",
   [
     {"class", "a-cover-image__cover a-cover-image__cover-small"},
     {"data-image",
      "/sites/default/files/styles/1x1/public/legacy/khloe-kardashian-anxiety-pregnancy.png?itok=agZilCJ6"},
     {"data-text", "A photo of Khloe Kardashian dressed up for a night out"},
     {"data-height", ""},
     {"data-width", ""}
   ], []}
]

我很难理解如何获得data-text,我该如何退货?谢谢

标签: elixir

解决方案


您可以使用Floki.attribute/2

body |> Floki.find(".a-cover-image__cover-small") |> Floki.attribute("data-text")
# => ["A photo of Khloe Kardashian dressed up for a night out"]

如果您知道只有一个匹配元素,您可以使用模式匹配提取它:

[text] = body |> Floki.find(".a-cover-image__cover-small") |> Floki.attribute("data-text")
text # => "A photo of Khloe Kardashian dressed up for a night out"

推荐阅读