banner

Сила Xpath

Недавно мне потребовалось спарсить сайты на движке dle. Почти на всех сайтах запись лежит в div c id='news-id-число'. Регулярные выражения здесь не очень подойдут, т.к откуда контент начинается мы знаем, а вот где заканчивается нет. Внутри много вложенных тэгов, поэтом спарсить всё от <div> до </div> не подойдёт, нужно будет считать кол-во открытых и кол-во закрытых дивов внутри. Тут нам и придёт на помощь Xpath, который с легкостью позволяет осуществлять навигацию по DOM.

import lxml.html
doc = lxml.html.document_fromstring(data)
id = 1
content = doc.xpath('//*[@id="news-id-%s"]'%(id)) # получаем всё что внутри этого div
title = doc.find(".//title").text # Тайтл # получаем title
text =  lxml.html.tostring(content[0],pretty_print=True)

Сам путь XPath можно получить с помощью плагинов для firefox, например с помощью Firebug.

5 Ответов на “Сила Xpath”

  1. Chrome~ сказал:

    Спасибо за информацию. Надо будет посмотреть, есть ли в Delphi/PHP готовые модули для работы с XPath.

  2. seoplayer сказал:

    simple html dom parser практически аналогично работает…

  3. Крайст сказал:

    Долго тупил с этим Xpath, почему-то не обращался к манам, а пробовал вбивать путь из Firebug, но через минут 40 еб*тни просто плюнул, поматерился и вернулся к beatifusoap =)
    Но спасибо, может вторая попытка будет не такой уж ужасной =)

  4. rushter сказал:

    Bsoup заметно медленней и на невалидный html ругается :)

  5. Крайст сказал:

    странно, у меня не ругался.
    зато ты дал стимул ещё раз повозиться с XPath =)

Оставить комментарий