【问题标题】:How do I read a web page in Racket?如何在 Racket 中阅读网页?
【发布时间】:2012-12-10 13:48:23
【问题描述】:

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

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

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

【问题讨论】:

标签: web lisp scheme racket


【解决方案1】:

这是一个简单的程序,看起来就像你想要的那样:

#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包。构建文档可能需要相当长的时间。不过,这是一次性成本,再次运行该程序不会超过几秒钟。

【讨论】:

  • 应该已经澄清了;如果您想要的只是原始文本,则不需要调用 html->sxml,您可以使用 (regexp-match #px#".*" ...) 将字符从管道中吸出.
  • port->string 可能是您从端口拉取所有内容时所看到的:docs.racket-lang.org/reference/…
  • @JohnClements 完美,谢谢!我使用了 port->string,它给了我纯文本的网页!
  • 有明显的内置方式吗?没有不需要第三方库的简单方法似乎很奇怪。
  • 当然;让我知道你的想法。另外,我使用了端口->字节;我猜相关的 RFC 是使用字节而不是 utf-8 指定的。
猜你喜欢
  • 2011-10-27
  • 1970-01-01
  • 1970-01-01
  • 2011-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-03
  • 1970-01-01
相关资源
最近更新 更多