我需要帮助从包含lxml的页面解析一些文本。我试过beautifulsoup和我正在解析的页面的HTML是如此破碎,它将无法正常工作。所以我已经转到了lxml,但文档有点令人困惑,我希望有人可以帮助我。
Here是我要解析的页面,我需要在“其他信息”部分下找到该文本。请注意,我在这个网站上有很多页面要解析,每个页面的html并不总是完全相同(可能包含一些额外的空“td”标签)。关于如何获得该文本的任何建议都将非常感激。
感谢您的帮助。
答案 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))