Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 24, 2013 20:38:24

gelius
Зарегистрирован: 2013-03-18
Сообщения: 132
Репутация: +  0  -
Профиль   Отправить e-mail  

помогите с xpath

Собираю ссылки.
При такой записи:

        urls = lxml.html.fromstring(s)
        urls = urls.xpath('//a[not(re:match(@href, "(banned1|banned2)")) and starts-with(@href, "/") or starts-with(@href, ref) ]/@href', namespaces={"re": "http://exslt.org/regular-expressions"})
не отрабатывают заблокированные слова.
Так:
        urls = lxml.html.fromstring(s)
        urls = urls.xpath('//a[not(re:match(@href, "(banned1|banned2)"))  ]/@href', namespaces={"re": "http://exslt.org/regular-expressions"})
отрабатывают.
Но мне нужны только ссылки с домена в переменной “ref”

Офлайн

#2 Ноя. 24, 2013 20:51:09

bw
От:
Зарегистрирован: 2007-09-26
Сообщения: 938
Репутация: +  20  -
Профиль   Адрес электронной почты  

помогите с xpath

x and (y or z)

p.s. В “href” не обязательно должны быть домены, абсолютные или относительные пути (а ещё может быть “//example.com/…”). Так что лучше использовать вторую регулярку и `urlparse.urljoin` и/или `urlparse.urlsplit` в цикле.

..bw



Отредактировано bw (Ноя. 24, 2013 20:56:20)

Офлайн

#3 Ноя. 25, 2013 08:48:41

malya
От:
Зарегистрирован: 2012-01-11
Сообщения: 49
Репутация: +  1  -
Профиль   Отправить e-mail  

помогите с xpath

or starts-with(@href, ref) ]/@href'

а здесь у Вас случаем не ошибка?

or starts-with(@href, "ref") ]/@href'



Отредактировано malya (Ноя. 25, 2013 08:49:21)

Офлайн

#4 Ноя. 25, 2013 11:52:23

lorien
От:
Зарегистрирован: 2006-08-20
Сообщения: 755
Репутация: +  37  -
Профиль  

помогите с xpath

А есть ли смысл пихать эту сложную логику в XPATH? Я бы циклом пробежался по всем ссылкам и отфильтровал бы потом питоном нужные ссылки.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version