Подтвердить что ты не робот

Нужна помощь синтаксиса python lxml для разбора html

Я новичок в python, и мне нужна помощь в синтаксисе для поиска и итерации с помощью html-тегов с использованием lxml. Вот примеры использования, с которыми я имею дело:

HTML файл довольно хорошо сформирован (но не идеален). Имеет несколько таблиц на экране, один из которых содержит набор результатов поиска, и один для заголовка и нижнего колонтитула. Каждая строка результата содержит ссылку для подробной информации о результатах поиска.

  • Мне нужно найти среднюю таблицу со строками результатов поиска (это я смог выяснить):

        self.mySearchTables = self.mySearchTree.findall(".//table")
        self.myResultRows = self.mySearchTables[1].findall(".//tr")
    
  • Мне нужно найти ссылки, содержащиеся в этой таблице (вот где я застреваю):

        for searchRow in self.myResultRows:
            searchLink = patentRow.findall(".//a")
    

    Кажется, что на самом деле нет ссылок на элементы ссылок.

  • Мне нужен простой текст ссылки. Я предполагаю, что это будет что-то вроде searchLink.text, если я действительно получил элементы ссылки в первую очередь.

Наконец, в фактической ссылке API для lxml я не смог найти информацию о вызовах find и findall. Я почерпнул их из бит кода, который я нашел в google. Мне не хватает чего-то о том, как эффективно найти и перебрать HTML-теги с помощью lxml?

4b9b3361

Ответ 1

Хорошо, во-первых, в отношении разбора HTML: если вы следуете рекомендациям zweiterlinde и S.Lott, по крайней мере, используйте версию beautifulsoup, включенную в LXML. Таким образом, вы также воспользуетесь преимуществами селекторного интерфейса xpath или css.

Однако я лично предпочитаю Ian Bicking HTML-парсер, включенный в lxml.

Во-вторых, .find() и .findall() исходят из lxml, пытающегося быть совместимым с ElementTree, и эти два метода описаны в Поддержка XPath в ElementTree.

Эти две функции довольно просты в использовании, но они очень ограничены XPath. Я рекомендую использовать либо полный метод lxml xpath(), либо, если вы уже знакомы с CSS, используя cssselect().

Вот несколько примеров, когда строка HTML обрабатывается следующим образом:

from lxml.html import fromstring
mySearchTree = fromstring(your_input_string)

С помощью селектора css ваша программа будет примерно выглядеть примерно так:

# Find all 'a' elements inside 'tr' table rows with css selector
for a in mySearchTree.cssselect('tr a'):
    print 'found "%s" link to href "%s"' % (a.text, a.get('href'))

Эквивалент, использующий метод xpath, будет следующим:

# Find all 'a' elements inside 'tr' table rows with xpath
for a in mySearchTree.xpath('.//tr/*/a'):
    print 'found "%s" link to href "%s"' % (a.text, a.get('href'))

Ответ 2

Есть ли причина, по которой вы не используете Beautiful Soup для этого проекта? Это значительно упростит работу с документами с несовершенной формой.