2010-02-28 15 views
5

Ich möchte einige Informationen aus einer Webseite extrahieren, die in einer HTML < Tabelle> enthalten ist. Wie kann ich alle Tabelleninformationen in ein schönes | extrahieren getrennte Datei?Scraping einer HTML-Tabelle in 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. 

Idealerweise würde Ich mag eine Funktion haben, die eine URL und Ausgabedatei nimmt als Parameter dann die obige Ausgabe gibt.

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

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

Beispiel-HTML-Eingang für die obige Ausgabe:

 
<!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> 

Antwort

7

beginnt mit Drakma für die Daten abgerufen werden. Um das Ding zu analysieren, könnten Sie cxml hilfreich finden. Oder noch besser: Sie könnten closure-html verwenden, was beliebiges HTML 4 parsen sollte. Die Common-Lisp.net-Seite des Closure-HTML-Pakets hat eine screen scraping example.