简化这个python生成

时间:2013-05-09 13:24:52

标签: python lambda html-parsing beautifulsoup generator

我是python的新手。有没有办法简化这个:

def getDivs():
    divs = soup.findAll(name = "div", attrs = {"class" : "resultCell"}, recursive = True)
    for div in divs:
        h2 = div.find("h2")
        a = h2.find("a")
        href = a["href"]
        yield (href)

divs = list(getDivs())

我觉得我应该能够创建一个匿名函数而不是getDivs。像(伪代码)的东西:

divs = 

  [
     divs = soup.findAll(name = "div", attrs = {"class" : "resultCell"}, recursive = True)
     for div in divs:
        h2 = div.find("h2")
        a = h2.find("a")
        href = a["href"]
        yield (href)
  ]

由于

1 个答案:

答案 0 :(得分:3)

只需使用列表理解:

divs = [ div.find("h2").find("a")["href"]
           for div in soup.findAll(name = "div",
                                   attrs = {"class" : "resultCell"},
                                   recursive = True) ]

但使用正确的XML解析工具是一个更好的主意。