factorization
This commit is contained in:
parent
0ff9e3acaf
commit
384e3521c7
1 changed files with 23 additions and 24 deletions
|
|
@ -26,6 +26,21 @@ __all__ = ['get_parser', 'NoParserFound']
|
||||||
|
|
||||||
class NoParserFound(Exception): pass
|
class NoParserFound(Exception): pass
|
||||||
|
|
||||||
|
def load_lxml(*args, **kwargs):
|
||||||
|
from .lxmlparser import LxmlHtmlParser
|
||||||
|
return LxmlHtmlParser()
|
||||||
|
|
||||||
|
def load_html5lib(*args, **kwargs):
|
||||||
|
from .html5libparser import Html5libParser
|
||||||
|
return Html5libParser(*args, **kwargs)
|
||||||
|
|
||||||
|
def load_elementtidy(*args, **kwargs):
|
||||||
|
from .elementtidyparser import ElementTidyParser
|
||||||
|
return ElementTidyParser()
|
||||||
|
|
||||||
|
def load_buildtin(*args, **kwargs):
|
||||||
|
from .htmlparser import HTMLParser
|
||||||
|
return HTMLParser()
|
||||||
|
|
||||||
def get_parser(preference_order=['lxml', 'html5lib', 'elementtidy', 'builtin'], *args, **kwargs):
|
def get_parser(preference_order=['lxml', 'html5lib', 'elementtidy', 'builtin'], *args, **kwargs):
|
||||||
"""
|
"""
|
||||||
|
|
@ -36,28 +51,12 @@ def get_parser(preference_order=['lxml', 'html5lib', 'elementtidy', 'builtin'],
|
||||||
if not isinstance(preference_order, (tuple, list)):
|
if not isinstance(preference_order, (tuple, list)):
|
||||||
preference_order = [preference_order]
|
preference_order = [preference_order]
|
||||||
for kind in preference_order:
|
for kind in preference_order:
|
||||||
if kind == 'lxml':
|
if not 'load_%s' % kind in globals():
|
||||||
|
continue
|
||||||
|
|
||||||
try:
|
try:
|
||||||
from .lxmlparser import LxmlHtmlParser
|
return globals()['load_%s' % kind]()
|
||||||
return LxmlHtmlParser()
|
|
||||||
except ImportError:
|
|
||||||
logging.debug('%s is not installed.' % kind)
|
|
||||||
elif kind == 'html5lib':
|
|
||||||
try:
|
|
||||||
from .html5libparser import Html5libParser
|
|
||||||
return Html5libParser(*args, **kwargs)
|
|
||||||
except ImportError:
|
|
||||||
logging.debug('%s is not installed.' % kind)
|
|
||||||
elif kind == 'elementtidy':
|
|
||||||
try:
|
|
||||||
from .elementtidyparser import ElementTidyParser
|
|
||||||
return ElementTidyParser()
|
|
||||||
except ImportError:
|
|
||||||
logging.debug('%s is not installed.' % kind)
|
|
||||||
elif kind == 'builtin':
|
|
||||||
try:
|
|
||||||
from .htmlparser import HTMLParser
|
|
||||||
return HTMLParser()
|
|
||||||
except ImportError:
|
except ImportError:
|
||||||
logging.debug('%s is not installed.' % kind)
|
logging.debug('%s is not installed.' % kind)
|
||||||
|
|
||||||
raise NoParserFound()
|
raise NoParserFound()
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue