Ich habe versucht zu lernen, wie Sie Daten aus HTML-Dateien in Haskell extrahieren, und haben eine Wand getroffen. Ich bin überhaupt nicht wirklich Erfahrung mit Haskell, und mein vorheriges Wissen ist von Python (und BeatifulousSoup für HTML-Parsing).Parsing Tags mit TagSoup in Haskell
Ich benutze TagSoup, um meinen HTML zu betrachten (schien empfohlen zu werden) und habe irgendwie eine grundlegende Idee davon, wie es funktioniert. Hier ist das Basissegment meines Codes in Frage (self-contained und gibt Informationen zum Testen):
import System.IO
import Network.HTTP
import Text.HTML.TagSoup
import Data.List
main :: IO()
main = do
http <- simpleHTTP (getRequest "http://www.cbssports.com/nba/scoreboard/20130310") >>= getResponseBody
let tags = dropWhile (~/= TagOpen "div" []) (parseTags http)
done tags where
done xs = case xs of
[] -> putStrLn $ "\n"
_ -> do
putStrLn $ show $ head xs
done (tail xs)
Aber ich bin nicht auf ein „div“ -Tag zu bekommen versuchen. Ich möchte wie diese in einem Format vor einem Tag alles fallen zu lassen:
TagOpen "div" [("id","scores-1997830"),("class","scoreBox spanCol2")]
TagOpen "div" [("id","scores-1997831"),("class","scoreBox spanCol2 lastCol")]
Ich habe versucht zu schreiben Sie es aus:
let tags = dropWhile (~/= TagOpen "div" [("id", "scores-[0-9]+"), ("class", "scoreBox(spanCol[0-9]?)+(lastCol)?")]) (parseTags http)
Aber dann versucht es die wörtliche [0-9] zu finden +. Ich habe noch keine Problemumgehung mit dem Text.Regex.Posix-Modul gefunden, und das Entkommen der Zeichen funktioniert nicht. Was ist die Lösung hier?
Wie wäre es 'fromAttrib "id" tag = ~„scores- [0-9] + schreiben müssen "'? –
Danke, Jungs! Beide funktionieren. Ich bin mir nicht sicher, was "besser" ist, aber da ich so viel Code wie möglich schreiben möchte (zu Lernzwecken, keine Sorge), werde ich nur Koterpillars Methode für den Moment verwenden. Vielen Dank! – simonsays