用Common Lisp抓取网页的内容
Table of Contents
Drakma 是用 Common Lisp 实现的全功能 HTTP 客户端。使用drakma:http-request函数可以从客户端发送HTTP请求给指定的网站资源,本文给出抓取网页内容(HTML源码)和下载网站文件的方式。
1 HTTP GET方法抓取网页内容
CL-USER>(drakma:http-request "http://www.lispss.cn/") "<html> <head lang='en'> <base href=\"http://www.lispss.cn/\" target=\"_blank\"> ...
可以看到成功向网站服务端发送了一次HTTP GET请求,并获取HTTP响应。如示例所示,对于本次请求,响应为HTML源码的字符串。
2 HTTP POST方法抓取网页内容
CL-USER>(drakma:http-request "http://www.lispss.cn/message" :method :post :parameters '(("body" . "Someone")("message" . "Hi,this's a test."))) "<!DOCTYPE html > <html><head><title>LispSu</title><meta charset=\"utf-8\" name=\"viewport\" content=...
可以看到成功向网站服务端发送了一次HTTP POST请求,请求同时发送了参数body和message。
3 下载文件
(with-open-file(out
"/root/download/file-name.jpg"
:element-type '(unsigned-byte 8)
:if-exists :supersede
:direction :output)
(cl-fad:copy-stream
(flexi-streams:flexi-stream-stream
(drakma:http-request "http://www.lispss.cn/st/pic/lisp_logo.jpg"
:want-stream t))
out))
以上代码将指定URL下的图片文件下载到客户端并保存为指定文件名。