exeto
@exeto
front-end developer

Как в grab для python, исключить определенную ноду из обработки?

Есть такой код:

from grab import Grab

g = Grab()
g.go('http://habrahabr.ru/post/241889/')
xpath = '//div[contains(@class, "content_left")]//div[contains(@class, "content")]'
print(g.doc.select(xpath).html())


1. Как исключить, к примеру, //div[contains(@class, "polling")]?

2. Как обработать две ноды? Так //div | //span обрабатывается только первая.
  • Вопрос задан
  • 5086 просмотров
Решения вопроса 1
exeto
@exeto Автор вопроса
front-end developer
1. Решение:

from grab import Grab
from grab.tools.lxml_tools import drop_node

url = 'http://habrahabr.ru/post/241889/'
xpath = '//div[contains(@class, "content_left")]//div[contains(@class, "content")]'
drop = '//div[contains(@class, "polling")]'

g = Grab()
g.go(url)
page = g.doc.select(xpath)
drop_node(page.node(), drop)

for element in page:
    print(element.html())


2. Не знаю почему я сразу не обратил внимание, что grab.doc.select() возвращает итерируемый объект. Вот решение:

from grab import Grab

g = Grab()
g.go(url)
xpath = '//div | //span'

for element in g.doc.select(xpath):
    print(element.html())
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы