使用lxml查找div中的所有链接

Tel*_*tha 3 python lxml web-crawler python-2.x mechanize-python

我正在编写一个工具,需要收集网页div中的所有网址,但不包括该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>
Run Code Online (Sandbox Code Playgroud)

当用Firebug选择div并选择XPath时,我得到://*[@ id ="foo"].到现在为止还挺好.但是我一直试图找到div foo中的所有url.请帮我找到一种方法来提取元素中href定义的url.

示例代码类似于我正在使用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
Run Code Online (Sandbox Code Playgroud)

感谢您的时间!

sta*_*alk 11

你可能想要这个:

hrefs = root.xpath('//div[@id="foo"]//a/@href')
Run Code Online (Sandbox Code Playgroud)

这将为您提供任何级别内部标签的所有href值的列表a<div id="foo">