jquery
  • python
  • html
  • dom
  • 2013-09-10 8 views 1 likes 
    1

    Я строку HTML элементовКак разобрать HTML-строку в HTML-элементы DOM в python?

    HTMLstr = """ 
        <div class='column span4 ui-sortable' id='column1'></div> 
        <div class='column span4 ui-sortable' id='column2'> 
         <div class='portlet ui-widget ui-widget-content ui-helper-clearfix ui-corner-all' id='widget_basicLine'> 
         <div class='portlet-header ui-widget-header ui-corner-all'><span class='ui-icon ui-icon-minusthick'></span>Line Chart </div> 
         <div class='portlet-content' id=basicLine style='height:270px; margin: 0 auto;'></div>   
         </div> 
        </div> 
        <div class='column span4 ui-sortable' id='column3'></div> """ 
    

    Я хочу, чтобы преобразовать выше HTML строки в соответствующие элементы HTML DOM в Python?

    Я могу сделать это в функции jQuery/AJAX через $(this).html(HTMLstr);, но как его разобрать в python?

    +0

    У вас есть код python, который вы пробовали? Любые библиотеки, на которые вы уже посмотрели? Что сработало, а что нет? –

    +0

    попробуйте html dom parser. http://thehtmldom.sourceforge.net/ – Pradeeshnarayan

    +0

    Я еще не использовал любую библиотеку. Я отправляю HTMLstr из бэкэнд (python) в интерфейс. Я хочу проанализировать HTMLstr в его эквивалентные элементы HTMLDOM только из python. Как мне это сделать? – PythonEnthusiast

    ответ

    1

    Вы должны использовать BeautifulSoup - делает именно то, что вам нужно.

    http://www.crummy.com/software/BeautifulSoup/

    +0

    Я пробовал это, и он возвращает ту же строку, а не элементы HTML. 'от BS4 импорта BeautifulSoup htmlstr = "

    Line Chart
    " суп = BeautifulSoup (htmlstr) возвращение soup' – PythonEnthusiast

    +0

    Что вы пытаетесь сделать? Как вы определили, что это строковый объект, а не какой-то другой более сложный объект? –

    +0

    Я создал строку (показанную выше), и я возвращаю эту строку с питона на передний конец. В интерфейсном браузере я получаю простой текст строки, вместо этого хочу, чтобы строка была разобрана в эквивалентные элементы HTML и соответствующим образом выдала результат. Как мне это сделать? – PythonEnthusiast

    4

    Python имеет встроенные библиотеки для разбора HTML-документов. В Python 2.x у вас есть выбор HTMLParser (рекомендуется) и htmllib (устаревший); в Python 3.x, html.parser - соответствующая библиотека (это переименованная версия HTMLParser из Python 2.x).

    Однако эти обработчики, управляемые событиями (аналогичные синтаксическим анализаторам XML SAX), которые могут быть не такими, какие вы хотите. Альтернативой может быть использование одного из инструментов анализа XML Python, если вы знаете, что документ будет действительным XML (т. Е. Правильно закрыты теги и т. Д.). Библиотеки xml.dom и xml.dom.minidom оба варианта, в зависимости от того, какой вид синтаксического анализа вы ищете (я подозреваю, что xml.dom.minidom достаточно для ваших целей, учитывая ваш пример).

    Например, вы должны быть в состоянии ввести это в консоли Python и получить результат, показанный:

    >>> import xml.dom.minidom 
    >>> x = xml.dom.minidom.parseString('<div class="column span4 ui-sortable" id="column2"><div class="portlet ui-widget ui-widget-content ui-helper-clearfix ui-corner-all" id="widget_basicLine" /></div>') 
    >>> x.documentElement.nodeName 
    'div' 
    >>> x.documentElement.getAttribute("class") 
    'column span4 ui-sortable' 
    >>> len(x.documentElement.firstChild.childNodes) 
    0 
    

    Полное описание узла объектов вы получаете доступно here. Если вы используете DOM в JavaScript, вы должны обнаружить, что большинство свойств одинаковы. Обратите внимание, что поскольку Python рассматривает это как XML-документ, свойства, специфичные для HTML, такие как «класс», не имеют особого значения, поэтому я считаю, что вам нужно использовать функцию getAttribute для доступа к ним.

    +0

    Как использовать HTMLParser. Любой рабочий пример? – PythonEnthusiast

    +0

    В документации на Python приведен пример [здесь] (http://docs.python.org/2/library/htmlparser.html#example-html-parser-application). Тем не менее, мне кажется, что ['HTMLParser'] (http://docs.python.org/2/library/htmlparser.html) управляется событиями, а не парсер DOM из вашего примера, поэтому вам может быть лучше с одним из парсеров XML. Для 'xml.dom.minidom' соответствующими вызовами являются либо' xml.dom.minidom.parse' (для файлов), либо 'xml.dom.minidom.parseString' (для строк разметки). –

    +0

    Все еще не в состоянии получить нужную информацию. Можете ли вы привести рабочий пример. – PythonEnthusiast

    Смежные вопросы