Сложный разбор HTML с Python - PullRequest
4 голосов
/ 02 июля 2010

Я уже знаю о разборе HTML на основе тегов в Python с использованием BeautifulSoup, htmllib и т. Д.

Однако мне нужен мощный движок, который может выполнять сложные задачи, такие как чтение таблиц, списков и т. Д., И представлять их какпростые в использовании объекты в коде.Есть ли в Python такие мощные библиотеки?

Ответы [ 3 ]

2 голосов
/ 02 июля 2010

Вы можете рассмотреть lxml, который имеет мощный процессор HTML. Есть еще один дополнительный модуль, который использует lxml и называется pyquery, который может быть именно тем, что вы ищете.

PyQuery имеет jQuery-подобный синтаксис, поэтому, если вы привыкли к jQuery, вы сможете сразу перейти.

Вот простой пример получения первого элемента <ul> от aol.com:

.
>>> from pyquery import PyQuery as pq
>>> import urllib
>>> data = urllib.urlopen('http://aol.com').read()
>>> d = pq(data)
>>> first_ul = d('ul:first')
>>> first_ul
[<ul#dhL2>]
>>> print first_ul
<ul id="dhL2"><li class="dhL1"><a accesskey="" href="https://new.aol.com/productsweb/?promocode=827693&amp;ncid=txtlnkuswebr00000074" name="om_dirbtn1" class="_o4-0" id="om_dirbtn1">Get Free Mail</a></li>
            </ul>
2 голосов
/ 02 июля 2010

BeautifulSoup - это хорошая библиотека, которая предоставляет хороший способ разбора HTML, а также несколько удобных способов разбора данных очень легко.

То, что вы пытаетесь сделать, можно легко сделать с помощью простых регулярных выражений.Вы можете написать регулярные выражения для поиска определенного шаблона данных и извлечения необходимых данных.

0 голосов
/ 03 июля 2010

Стандартные HTML-парсеры уже довольно хороши в предоставлении простых объектов (например, итерируемых). Создание чего-либо более сложного, чем 2D-список из таблицы, вероятно, будет зависеть от данных, которые были на странице.

С этим сказал ...

Вот ссылка на сообщение в блоге от того, кто написал скрипт для преобразования html-таблиц в списки python. Фактический файл находится здесь .

Я никогда не слышал о стандартной библиотеке Python, которая выполняет подобные операции, поэтому лучшим вариантом может быть поиск в Google каждого случая по мере необходимости. Скорее всего, кто-то сделал то, что вы пытаетесь сделать.

Отказ от ответственности: Вы всегда должны читать и понимать любой код, который вы найдете в Интернете, прежде чем вставлять его в свои собственные приложения! Цитировать, кто / откуда это тоже хорошо!

...