Не могу понять, как вызвать html5Tidy из Python 3

Для Питона 3.5.

Может ли кто-нибудь указать мне документацию по использованию html5tidy с Python 3? Я поражен, что многократные поиски ничего не возвращают.

В документации Python 3 в html5tidy.py говорится:

"""
HTML5Tidy
=========

Simple wrapper around html5lib & lxml.etree to "tidy" html in the wild to
well-formed xml/html

Usage
-----

    >>> from html5tidy import tidy
    >>> tidy('some text')
    '<html><head/><body>some text</body></html>'

Dependencies
------------

* [html5lib](http://code.google.com/p/html5lib/)
* [lxml](http://lxml.de/)

Итак, у меня есть все части:

>>> import html5lib
>>> dir(html5lib)
['HTMLParser', '__all__', '__builtins__', '__cached__', [and so on]]
>>> 
>>> import lxml
>>> dir(lxml)
['__builtins__', '__cached__', '__doc__', '__file__', [and so on]]

НО я отмечаю, что dir(tidy) возвращает только результаты с двойным подчеркиванием:

>>> from html5tidy import tidy
>>> dir(tidy)
['__annotations__', '__call__', '__class__', [and so on...]'__subclasshook__']

Итак, я открываю файл, содержащий HTML, как untidiedHTML.

>>> print(untidiedHTML)
<!DOCTYPE html>
<html id="ng-app" lang="en" ng-app="TH" style="" xmlns:ng="http://angularjs.org">
 <head ng-controller="DZHeadController">
  <meta content="text/html; charset=utf-8" http-equiv="content-type"/>
  <title ng-bind="service.title">
   What the Heck Is OAuth? - DZone Security
  </title>
  <link href="WhatIsOAuth0200_files/tranquility.css" rel="stylesheet" type="text/css"/>
 </head>
 <body class="tranquility" >
 ... and so on...

Затем в аккуратной документации HTML5 я пытаюсь:

from html5tidy import tidy
tidiedHTML = tidy(untidiedHTML)

Это производит:

Traceback (most recent call last):
  File "[path to my Python source file].py", line 50, in <module>
    tidiedHTML = tidy(untidiedHTML)
  File "/usr/local/lib/python3.5/dist-packages/html5tidy.py", line 61, in tidy
    parts = [parser.parse(src, encoding=encoding, parseMeta=parseMeta, useChardet=useChardet)]
  File "/usr/local/lib/python3.5/dist-packages/html5lib/html5parser.py", line 289, in parse
    self._parse(stream, False, None, *args, **kwargs)
  File "/usr/local/lib/python3.5/dist-packages/html5lib/html5parser.py", line 130, in _parse
    self.tokenizer = _tokenizer.HTMLTokenizer(stream, parser=self, **kwargs)
  File "/usr/local/lib/python3.5/dist-packages/html5lib/_tokenizer.py", line 36, in __init__
    self.stream = HTMLInputStream(stream, **kwargs)
  File "/usr/local/lib/python3.5/dist-packages/html5lib/_inputstream.py", line 149, in HTMLInputStream
    return HTMLUnicodeInputStream(source, **kwargs)
TypeError: __init__() got an unexpected keyword argument 'parseMeta'

Я понятия не имею, что делать. Я искал документацию, объясняющую, как вызывать html5tidy из Python 3, но ничего не нашел...


person RBV    schedule 16.05.2018    source источник


Ответы (1)


Эта библиотека не работает и/или не работает с Python 3.5. Я установил и столкнулся с ошибками, связанными с html5lib.HTMLParser https://github.com/aleray/html5tidy/blob/master/html5tidy.py#L57

Есть один участник и пакет не обновлялся 6 лет.

Ваши варианты

  • разветвите репозиторий, устраните проблемы и отправьте запрос на включение
  • извлеките код, который вам нужен, и сверните свой собственный
  • найти другую библиотеку
person d g    schedule 17.05.2018
comment
Вау - спасибо вам за это! Я был поражен тем, что многочисленные поиски в Интернете не давали результатов. Вы объяснили, почему это так. - person RBV; 17.05.2018
comment
Рад, что смог помочь! - person d g; 17.05.2018