我用以下代码获得了页面的html:
#!/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>标签中获取标题,即文本
发布于 2022-07-03 10:07:42
我更喜欢使用XML工具,而不是HTML,或者在Racket (和一般的方案),sxml中。这使您可以使用类XPath查询轻松地从文档中提取数据。幸运的是,将HTML解析为sxml表达式很简单:
#!/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))或者在你的情况下
(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参数调用该过程时,返回所有匹配的列表。如果您要反复寻找相同的东西,那么定义一个新函数而不是使用一个临时函数是值得的:
(define get-title-text (sxpath "/html/head/title/text()"))html-parsing和sxml包应该通过DrRacket包管理器安装,或者通过raco pkg install html-parsing sxml命令行安装,无论您喜欢哪种。
https://stackoverflow.com/questions/72845244
复制相似问题