使用Lxml解析HTML

时间:2010-08-25 18:39:25

标签: python html parsing lxml

我需要帮助从包含lxml的页面解析一些文本。我试过beautifulsoup和我正在解析的页面的HTML是如此破碎,它将无法正常工作。所以我已经转到了lxml,但文档有点令人困惑,我希望有人可以帮助我。

Here是我要解析的页面,我需要在“其他信息”部分下找到该文本。请注意,我在这个网站上有很多页面要解析,每个页面的html并不总是完全相同(可能包含一些额外的空“td”标签)。关于如何获得该文本的任何建议都将非常感激。

感谢您的帮助。

1 个答案:

答案 0 :(得分:15)

import lxml.html as lh
import urllib2

def text_tail(node):
    yield node.text
    yield node.tail

url='http://bit.ly/bf1T12'
doc=lh.parse(urllib2.urlopen(url))
for elt in doc.iter('td'):
    text=elt.text_content()
    if text.startswith('Additional  Info'):
        blurb=[text for node in elt.itersiblings('td')
               for subnode in node.iter()
               for text in text_tail(subnode) if text and text!=u'\xa0']
        break
print('\n'.join(blurb))

产量

  

65年来,Carl Stirn's Marine   一直在制定新的标准   卓越和划船服务   享受。因为我们提供优质   商品,关怀,尽职尽责,   销售和服务,我们已经能够   让我们的客户变得更好   朋友。

     

我们26,000平方英尺的设施包括一个   完整的零件和配件   部门,全方位服务部门   (Merc.Premier经销商有2个全职   Mercruiser Master Tech's)和新的,   使用和经纪人销售。

编辑:这是一个基于Steven D. Majewski的xpath的替代解决方案,它解决了OP的评论,即将“附加信息”与模糊区分开的标签数量可能是未知的:

import lxml.html as lh
import urllib2

url='http://bit.ly/bf1T12'
doc=lh.parse(urllib2.urlopen(url))

blurb=doc.xpath('//td[child::*[text()="Additional  Info"]]/following-sibling::td/text()')

blurb=[text for text in blurb if text != u'\xa0']
print('\n'.join(blurb))