首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我如何在球拍中刮起一页的标题?

我如何在球拍中刮起一页的标题?
EN

Stack Overflow用户
提问于 2022-07-03 09:06:29
回答 1查看 61关注 0票数 0

我用以下代码获得了页面的html:

代码语言:javascript
复制
#!/usr/bin/env racket
#lang racket/base

(require net/url racket/port)
(require (planet neil/html-parsing:3:0))

(define p (get-pure-port (string->url "https://www.rosettacode.org/wiki/Web_scraping")))
(define my-html (port->string p))
(close-input-port p)

如何从<title>标签中获取标题,即文本

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-03 10:07:42

我更喜欢使用XML工具,而不是HTML,或者在Racket (和一般的方案),sxml中。这使您可以使用类XPath查询轻松地从文档中提取数据。幸运的是,将HTML解析为sxml表达式很简单:

代码语言:javascript
复制
#!/usr/bin/env racket
#lang racket
(require html-parsing)
(require sxml/sxpath)

(define my-html "<!doctype html><html><head><title>Title text here</title></head><body><p>a paragraph of text</p></body></html>")
(define document (html->xexp my-html))
; Returns a list of strings
(display-lines ((sxpath "/html/head/title/text()") document))

或者在你的情况下

代码语言:javascript
复制
(define document (call/input-url (string->url "https://www.rosettacode.org/wiki/Web_scraping")
                                 get-pure-port html->xexp))

(html->xexp使用一个包含holding或输入端口的字符串)

有趣的是sexp,它接受SXPath字符串并返回一个新过程,当使用sxml参数调用该过程时,返回所有匹配的列表。如果您要反复寻找相同的东西,那么定义一个新函数而不是使用一个临时函数是值得的:

代码语言:javascript
复制
(define get-title-text (sxpath "/html/head/title/text()"))

html-parsingsxml包应该通过DrRacket包管理器安装,或者通过raco pkg install html-parsing sxml命令行安装,无论您喜欢哪种。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72845244

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档