lxml: получить элемент с определенным дочерним элементом?

1

Работая в lxml, я хочу получить атрибут href всех ссылок с дочерним элементом img который имеет title="Go to next page".

Итак, в следующем фрагменте:

<a class="noborder" href="StdResults.aspx">
<img src="arrowr.gif" title="Go to next page"></img>
</a>

Я хочу вернуть StdResults.aspx.

У меня так далеко:

next_link = doc.xpath("//a/img[@title='Go to next page']") 
print next_link[0].attrib['href']

Но next_link это img, не тег - как я могу получить тег? a a

Благодарю.

Теги:
lxml

2 ответа

2
Лучший ответ

Просто измените a/img... на a[img...]: (скобки вроде среднего "такие, что")

import lxml.html as lh

content='''<a class="noborder" href="StdResults.aspx">
<img src="arrowr.gif" title="Go to next page"></img>
</a>'''

doc=lh.fromstring(content)
for elt in doc.xpath("//a[img[@title='Go to next page']]"):
    print(elt.attrib['href'])

# StdResults.aspx

Или вы можете пойти еще дальше и использовать

"//a[img[@title='Go to next page']]/@href"

для извлечения значений атрибутов href.

  • 0
    спасибо, я всегда думал, что [@ ..] может указывать только атрибуты. на самом деле мне интересно, есть ли хорошее место для ссылки или образцы lxml для таких путаницы?
0

Вы также можете выбрать родительский узел или произвольных предков, используя //a/img[@title='Go to next page']/parent::a или //a/img[@title='Go to next page']/ancestor::a соответственно как выражения XPath.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню