Próbowałem dowiedzieć się, jak wyodrębnić dane z plików HTML w Haskell i uderzyłem o ścianę. Nie jestem w ogóle doświadczeniem z Haskellem, a moja poprzednia wiedza pochodzi z Pythona (i BeatifulSoup do parsowania HTML).Analizowanie znaczników za pomocą TagSoup w Haskell
Używam TagSoup do oglądania mojego HTMLa (wydawało mi się to zalecane) i mam pewien podstawowy pomysł na to, jak to działa. Oto podstawowy segment kodu w moim pytaniu (samowystarczalny i wysyła informacje do testowania):
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)
jednak nie próbuję dostać się do jakiegokolwiek „div” tag. Chcę rzucić wszystko przed tagiem w formacie jak poniżej:
TagOpen "div" [("id","scores-1997830"),("class","scoreBox spanCol2")]
TagOpen "div" [("id","scores-1997831"),("class","scoreBox spanCol2 lastCol")]
Próbowałem pisząc go:
let tags = dropWhile (~/= TagOpen "div" [("id", "scores-[0-9]+"), ("class", "scoreBox(spanCol[0-9]?)+(lastCol)?")]) (parseTags http)
Ale potem próbuje znaleźć dosłowne [0-9] +. Jeszcze nie wymyśliłem obejścia z modułem Text.Regex.Posix, a unikanie znaków nie działa. Jakie jest rozwiązanie?
Jak o 'fromAttrib "id =" tag ~„scores- [0-9] + "'? –
Dzięki, chłopaki! Obie te prace. Nie jestem pewien, który z nich jest "lepszy", ale ponieważ chcę napisać jak najwięcej kodu (na potrzeby uczenia się, nie martw się), na razie będę tylko metodą Koterpillar. Wielkie dzięki! – simonsays