Web 如何在Racket中阅读网页?

Web 如何在Racket中阅读网页?,web,lisp,scheme,racket,Web,Lisp,Scheme,Racket,我能在网上找到的所有信息都是关于编写web服务器的,但对于web客户端有用的功能似乎很少。理想情况下,我希望函数如下所示: (website "http://www.google.com") 并返回一个包含整个网页的字符串,但我对任何有效的东西都很满意 这里有一个简单的程序,看起来它能做你想做的事: #lang racket (require net/url) (port->bytes (get-pure-port (string->url "http://www.googl

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

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

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

这里有一个简单的程序,看起来它能做你想做的事:

#lang racket

(require net/url)

(port->bytes
 (get-pure-port (string->url "http://www.google.com")))
如果你像我一样,你可能也想把它解析成一个s表达式。Neil Van Dyke的
Neil/html解析
实现了以下功能:

#lang racket

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

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

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

应该已经澄清;如果您只需要原始文本,则不需要调用html->sxml,您只需使用(regexp match#px##“*”…)将字符从管道中吸出。
port->string
可能是从端口提取所有内容时看到的:@JohnClements完美,谢谢!我使用了端口->字符串,它给了我纯文本的网页!有没有一个明显的内置方式?奇怪的是,没有不需要第三方库的简单方法;让我知道你的想法。另外,我使用了端口->字节;我猜相关的RFC是使用字节而不是utf-8指定的。参见