Floki快速入门:10分钟掌握HTML解析和节点搜索
Floki快速入门:10分钟掌握HTML解析和节点搜索
【免费下载链接】flokiFloki is a simple HTML parser that enables search for nodes using CSS selectors.项目地址: https://gitcode.com/gh_mirrors/fl/floki
Floki是一个简单的HTML解析器,支持使用CSS选择器搜索节点,让开发者能够轻松提取和处理网页数据。无论你是需要抓取网页内容、分析HTML结构,还是提取特定元素,Floki都能提供简洁高效的解决方案。
为什么选择Floki?
Floki作为轻量级HTML解析工具,具有三大核心优势:
- 简单易用:直观的API设计,无需复杂配置即可快速上手
- CSS选择器支持:使用熟悉的CSS语法定位节点,降低学习成本
- 多解析器兼容:默认使用高效的mochiweb_html解析器,同时支持fast_html和html5ever等替代方案
快速安装步骤
1. 添加依赖
在项目的mix.exs文件中添加Floki依赖:
defp deps do [ {:floki, "~> 0.38.0"} ] end2. 安装依赖
运行以下命令安装依赖:
mix deps.get3. Livebook/脚本环境安装
如果在Livebook或脚本中使用,可以直接通过Mix.install/2安装:
Mix.install([{:floki, "~> 0.38.0"}])核心功能使用指南
解析HTML文档
使用Floki.parse_document/1函数解析HTML内容:
html = """ <html> <body> <div class="container"> <h1>Hello Floki</h1> <p class="content">HTML parsing made easy</p> </div> </body> </html> """ {:ok, document} = Floki.parse_document(html)使用CSS选择器查找节点
Floki最强大的功能是支持CSS选择器语法查找节点:
# 查找class为content的p元素 Floki.find(document, "p.content") # => [{"p", [{"class", "content"}], ["HTML parsing made easy"]}] # 查找所有div元素下的h1元素 Floki.find(document, "div h1") # => [{"h1", [], ["Hello Floki"]}]提取元素属性
使用Floki.attribute/3函数提取元素属性:
# 提取所有a标签的href属性 Floki.attribute(document, "a", "href") # 先查找元素再提取属性 document |> Floki.find(".container") |> Floki.attribute("class") # => ["container"]获取元素文本内容
使用Floki.text/1函数提取元素文本:
document |> Floki.find("h1") |> Floki.text() # => "Hello Floki"转换节点为原始HTML
使用Floki.raw_html/1函数将节点转换回HTML字符串:
document |> Floki.find(".content") |> Floki.raw_html() # => "<p class=\"content\">HTML parsing made easy</p>"高级配置:选择HTML解析器
Floki支持多种HTML解析器,可根据需求选择:
使用fast_html解析器(推荐)
fast_html是基于lexbor的C语言解析器,性能优异:
# 添加依赖 defp deps do [ {:floki, "~> 0.38.0"}, {:fast_html, "~> 2.0"} ] end # 配置解析器 config :floki, :html_parser, Floki.HTMLParser.FastHtml使用html5ever解析器
html5ever是基于Rust的HTML5规范解析器:
# 添加依赖 defp deps do [ {:floki, "~> 0.38.0"}, {:html5ever, "~> 0.16.0"} ] end # 配置解析器 config :floki, :html_parser, Floki.HTMLParser.Html5ever支持的CSS选择器
Floki支持丰富的CSS选择器语法,包括:
| 选择器模式 | 描述 |
|---|---|
* | 匹配任何元素 |
E | 匹配标签为E的元素 |
E.class | 匹配class为指定值的E元素 |
E#id | 匹配id为指定值的E元素 |
E[attr] | 匹配具有attr属性的E元素 |
E[attr="value"] | 匹配attr属性值为value的E元素 |
E:nth-child(n) | 匹配父元素的第n个子元素E |
E > F | 匹配E元素的直接子元素F |
E + F | 匹配紧随E元素之后的F元素 |
实际应用示例
网页数据抓取
# 获取网页内容(需要HTTP客户端如HTTPoison) {:ok, response} = HTTPoison.get("https://example.com") {:ok, document} = Floki.parse_document(response.body) # 提取所有文章标题 titles = document |> Floki.find(".article-title") |> Floki.text() IO.inspect(titles)HTML结构分析
# 分析页面中的链接分布 links = document |> Floki.find("a") |> Floki.attribute("href") # 统计不同域名的链接数量 link_stats = links |> Enum.group_by(fn url -> URI.parse(url).host end) |> Enum.map(fn {host, urls} -> {host, length(urls)} end) IO.inspect(link_stats)性能优化建议
- 选择合适的解析器:对于大型HTML文档,推荐使用fast_html解析器
- 按需解析:只解析和处理需要的部分,避免不必要的节点遍历
- 缓存解析结果:对相同的HTML内容,缓存解析结果以提高性能
总结
Floki为Elixir开发者提供了简单而强大的HTML解析能力,通过熟悉的CSS选择器语法,让网页数据提取变得轻松高效。无论是简单的文本提取还是复杂的HTML结构分析,Floki都能满足你的需求。
通过本文介绍的安装步骤和基础用法,你已经掌握了Floki的核心功能。现在就开始在你的项目中使用Floki,体验高效HTML解析的乐趣吧!
更多详细API文档,请参考项目中的Hex Docs。
【免费下载链接】flokiFloki is a simple HTML parser that enables search for nodes using CSS selectors.项目地址: https://gitcode.com/gh_mirrors/fl/floki
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
