如何在Racket中从已获取的HTML源码提取页面title标签内容
Racket 提取HTML title标签内容的实现方案
你当前使用的neil/html-parsing库会将HTML文本解析为S表达式格式的XEXPR结构化数据,按以下步骤即可提取标题:
- 调用库提供的
html->xexp方法,把存储HTML源码的my-html字符串转为结构化XEXPR - 递归遍历XEXPR树,匹配标签名为
title的节点,提取内部文本拼接即可
完整可运行的补充代码如下,直接加到你现有代码末尾即可:
;; 解析HTML字符串为结构化XEXPR (define parsed-doc (html->xexp my-html)) ;; 递归查找title节点的工具函数 (define (extract-title node) (cond [(not (list? node)) ""] ;; XEXPR节点第一个元素是标签名,html-parsing统一转小写符号 [(eq? (car node) 'title) ;; 跳过标签名、属性表,过滤出子节点里的字符串拼接 (apply string-append (filter string? (cddr node)))] [else ;; 遍历所有子节点,返回第一个匹配到的title内容 (for/or ([child (cdr node)]) (define res (extract-title child)) (if (> (string-length res) 0) res #f))])) ;; 获取页面标题 (define page-title (extract-title parsed-doc))
运行后page-title变量存储的就是目标页面的标题文本,对应你抓取的Rosetta Code页面,提取结果为"Web scraping - Rosetta Code"。
说明:XEXPR的标准结构为
(标签名 属性键值对列表 子节点1 子节点2 ...),命中title标签后取第三个元素及之后的内容,过滤掉非字符串的子节点(常规页面title均为纯文本,无嵌套标签)拼接即可,不需要额外引入第三方依赖。
内容的提问来源于stack exchange,提问作者John Smith
相关产品推荐
相关产品推荐

