如何在 Racket 中阅读网页?

问题描述 投票:0回答:1

我在网上能找到的所有信息都是关于编写Web服务器的,但是对于Web客户端有用的功能似乎很少。理想情况下,我希望该函数看起来像这样:

(website "http://www.google.com")

并返回一个包含整个网页的字符串,但我会对任何有效的东西感到满意。

scheme lisp racket
1个回答
10
投票

这是一个简单的程序,看起来它可以满足您的要求:

#lang racket

(require net/url)

(port->bytes
 (get-pure-port (string->url "http://www.google.com")))

如果您像我一样,您可能也想将其解析为 s 表达式。 Neil Van Dyke 的

neil/html-parsing
是这样做的:

#lang racket

(require (planet neil/html-parsing:2:0)
         net/url)

(html->xexp
 (get-pure-port (string->url "http://www.google.com")))

请注意,由于该程序引用了planet包,因此第一次运行该程序将下载并安装htmlprag包。 构建文档可能需要相当长的时间。不过,这是一次性成本,再次运行该程序应该不会超过几秒钟。

编辑:在 2023 年,此代码仍然可以正常工作,但 PLAneT 目前尚未广泛使用,此时建议使用

raco install html-parsing
或使用
File>>Package Manager...
安装 html 解析包可能更惯用。菜单,然后运行

#lang racket

(require html-parsing
         net/url)

(html->xexp
 (get-pure-port (string->url "http://www.google.com")))
© www.soinside.com 2019 - 2024. All rights reserved.