= Client-Side Web Programming = == Libraries == * [[http://utidylib.berlios.de/|µTidylib]] and [[http://www.egenix.com/files/python/mxTidy.html|mxTidy]] -- Python interfaces to [[http://tidy.sourceforge.net/|html tidy]] library to clean up HTML documents. * [[http://code.google.com/p/html5lib|html5lib]] A HTML5-compliant library for parsing arbitarily-broken HTML to a range of tree formats including minidom, elementtree (including lxml) and BeautifulSoup * [[http://www.crummy.com/software/BeautifulSoup/|BeautifulSoup]] -- a permissive HTML parser. * Don't use [[https://docs.python.org/2/library/htmlparser.html|HTMLParser (Python 2.x)]] or [[https://docs.python.org/3.5/library/html.parser.html|html.parser (Python 3.x)]] on HTML that might be invalid! That way lies pain. Either clean it up (using tidy), or use a different parser. * [[http://docs.python.org/library/urllib.html|urllib]], [[http://docs.python.org/library/urllib2.html|urllib2]], and [[http://docs.python.org/library/httplib.html|httplib]] in the standard library. * [[http://wwwsearch.sourceforge.net/old/ClientCookie/|ClientCookie]], [[http://wwwsearch.sourceforge.net/ClientForm/|ClientForm]], and [[http://wwwsearch.sourceforge.net/mechanize/|Mechanize]] are higher-level libraries for writing a web client. * [[http://pypi.python.org/pypi?:action=display&name=mechanoid|mechanoid]] a mechanize fork. * [[http://www.python.org/pypi/libxml2dom|libxml2dom]] can parse HTML by employing libxml2's liberal HTML parser. == Resources == * [[http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/52199|Grab a document from the web]] - from the Python Cookbook * [[http://wwwsearch.sourceforge.net/old/bits/GeneralFAQ.html|Python web-client programming general FAQs]]. * [[http://docs.python.org/library/urllib.html|urllib -- Open arbitrary resources by URL]] * [[http://docs.python.org/library/urllib2.html|urllib2 -- extensible library for opening URLs]]