html-conduit

Parse HTML documents using xml-conduit datatypes.

https://github.com/snoyberg/xml

Version on this page:1.3.2
LTS Haskell 22.14:1.3.2.2
Stackage Nightly 2024-03-28:1.3.2.2
Latest on Hackage:1.3.2.2

See all snapshots html-conduit appears in

MIT licensed by Michael Snoyman
Maintained by [email protected]
This version can be pinned in stack with:html-conduit-1.3.2@sha256:e24bf7bd12e41ed960566804989672eeed8027905f9da4260e60ad184897ce46,2102

Module documentation for 1.3.2

This package uses tagstream-conduit for its parser. It automatically balances mismatched tags, so that there shouldn’t be any parse failures. It does not handle a full HTML document rendering, such as adding missing html and head tags. Note that, since version 1.3.1, it uses an inlined copy of tagstream-conduit with entity decoding bugfixes applied.

Simple usage example:

#!/usr/bin/env stack
{- stack --install-ghc --resolver lts-6.23 runghc
   --package http-conduit --package html-conduit
-}
{-# LANGUAGE OverloadedStrings #-}
import qualified Data.Text.IO        as T
import           Network.HTTP.Simple (httpSink)
import           Text.HTML.DOM       (sinkDoc)
import           Text.XML.Cursor     (attributeIs, content, element,
                                      fromDocument, ($//), (&/), (&//))

main :: IO ()
main = do
    doc <- httpSink "http://www.yesodweb.com/book" $ const sinkDoc
    let cursor = fromDocument doc
    T.putStrLn "Chapters in the Yesod book:\n"
    mapM_ T.putStrLn
      $ cursor
      $// attributeIs "class" "main-listing"
      &// element "li"
      &/ element "a"
      &/ content

Changes

1.3.2

  • Fix a bug that was removing < symbols in script tags.

1.3.1

  • Inline tagstream-conduit for entity decoding in attribute value bug fix.

1.3.0

  • Upgrade to conduit 1.3

1.2.1.2

  • Remove an upper bound
  • Doc improvement

1.2.1.1

  • Allow xml-conduit 1.4

1.2.1

  • Add strict and lazy text parsing #66

1.2.0

  • Drop system-filepath

1.1.1.2

  • Fix a bug with double-unescaping of entities