使用Lxml解析HTML

imn*_*mns 14 html python parsing lxml

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

是我要解析的页面,我需要获取"附加信息"部分下的文本.请注意,我有很多的页面在这个网站这样来解析和每个网页的HTML并不总是完全一样(可能包含一些额外的空"TD"标签).关于如何获得该文本的任何建议将非常感谢.

谢谢您的帮助.

unu*_*tbu 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))
Run Code Online (Sandbox Code Playgroud)

产量

65年来,Carl Stirn's Marine一直在为划船乐趣树立新的卓越标准和服务.因为我们提供优质的商品,关怀,尽职,销售和服务,我们已经能够使我们的客户成为我们的好朋友.

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

编辑: 这是一个基于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))
Run Code Online (Sandbox Code Playgroud)