2010-02-28 41 views
5

Tôi muốn trích xuất một số thông tin từ trang web được chứa trong bảng HTML <>. Làm thế nào tôi có thể trích xuất tất cả các thông tin bảng vào một tốt đẹp | tách tệp?Cạo một bảng HTML trong Common Lisp?

 
Author|Book|Year|Comments 
Bill Bryson|Short History of Nearly Everything|2004 
Stephen Hawking|A Brief History of Time|1998|Still haven't read. 

Lý tưởng nhất, tôi muốn có chức năng lấy URL và tệp đầu ra làm thông số sau đó cung cấp đầu ra ở trên.

 
(defun extract-table (url filename) 
     (extract-from-html-table (fetch-web-page url))) 

(extract-table "http://www.mypage.com" "output.txt") 

HTML mẫu đầu vào cho sản lượng trên:

 
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"> 
<html> 
<head> 
<title>Lisp</title> 
</head> 
<body> 
<h1>Welcome to Lisp</h1> 
<table class="any" style="font-size: 14px;"> 
    <TR class="header"> 
    <td>Author</td> 
    <TD>Book</TD> 
    <td>Year</td> 
    <td>Comments</td> 
    </TR> 
    <tr class="odd"> 
    <td>Bill Bryson</td> 
    <td>Short History of Nearly Everything</td> 
    <td>2004</td> 
    </tr> 
    <tr> 
    <td>Stephen Hawking</td> 
    <td>A Brief History of Time</td> 
    <td>1998</td> 
    <td>Still haven't read.</td> 
    </tr> 
</table> 
</body> 
</html> 

Trả lời

7

Bắt đầu với Drakma cho việc lấy dữ liệu. Để phân tích cú pháp, bạn có thể tìm thấy cxml hữu ích. Hoặc tốt hơn: bạn có thể sử dụng closure-html, nên phân tích cú pháp HTML tùy ý 4. Trang Common-Lisp.net của gói đóng gói html có screen scraping example.

Các vấn đề liên quan