Найти все ссылки внутри div с помощью lxml

Я пишу инструмент, которому нужно собрать все URL-адреса внутри div на веб-странице, но без URL-адресов за пределами этого div. Упрощенная страница выглядит примерно так:

<div id="bar">
   <a link I dont want>
   <div id="foo">
      <lots of html>
      <h1 class="baz">
         <a href=”link I want”>
      </h1>
      <h1 class="caz">
         <a href=“link I want”>
      </h1>
   </div>
</div>

При выборе div с помощью Firebug и выборе XPath я получаю: //*[@id="foo"]. Все идет нормально. Однако я застрял в попытке найти все URL-адреса внутри div foo. Пожалуйста, помогите мне найти способ извлечь URL-адрес, определенный href в элементах.

Пример кода, аналогичный тому, над которым я работаю, используя w3schools:

import mechanize
import lxml.html
import cookielib

br = mechanize.Browser()
cj = cookielib.LWPCookieJar()
br.set_cookiejar(cj)

br.set_handle_equiv(True)
br.set_handle_gzip(True)
br.set_handle_redirect(True)
br.set_handle_referer(True)
br.set_handle_robots(False)

br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(), max_time=1)
br.addheaders = [('User-agent', 'WatcherBot')]

r = br.open('http://w3schools.com/')
html = br.response().read()
root = lxml.html.fromstring(html)

hrefs = root.xpath('//*[@id="leftcolumn"]')

# Found no solution yet. Stuck

Спасибо за ваше время!


person Teletha    schedule 04.05.2013    source источник


Ответы (1)


Вы, вероятно, хотите этого:

hrefs = root.xpath('//div[@id="foo"]//a/@href')

Это даст вам список всех значений href из a тегов внутри <div id="foo"> на любом уровне.

person stalk    schedule 04.05.2013