我正在使用lxml将html转换为txt。我几乎可以通过解析,转换以及清理的一些部分(标签,空格,空行)功能以及程序启动和运行来到达我想要的位置。
然而,在我用大约一百个htmls(全部来自不同的网站)尝试我的代码后,我注意到一些例外情况,例如:
#wrapper #PrimaryNav {margin:0;*overflow:hidden;}
a.scbbtnred{background-position:right -44px;}
a.scbbtnblack{background-position:right -176px;}
.ghsearch{width:58px;height:21px;line-height:21px;background-position:0 -80px;}
a.scbbtnred span span{background-color:#f00;background-position:0 -22px;}
我认为这些是CSS?或其他网络编程的东西。但我完全不熟悉这些。
问题:这些行是什么?关于如何乘坐这些线路的任何建议?
编辑:以下是我在此问题之前的部分内容,供将来参与此帖的任何人参考(对python来说,这里的很多内容都可以改进,但它对我来说没问题):
# Function for html2txt using lxml
# Author:
# http://groups.google.com/group/cn.bbs.comp.lang.python/browse_thread/thread/781a357e2ce66ce8
def html2text(html):
tree = lxml.etree.fromstring(html, lxml.etree.HTMLParser()) if isinstance(html, basestring) else html
for skiptag in ('//script', '//iframe', '//style'):
for node in tree.xpath(skiptag):
node.getparent().remove(node)
# return lxml.etree.tounicode(tree, method='text')
return lxml.etree.tostring(tree, encoding=unicode, method='text')
#Function for cleanup the text:
# 1: clearnup: 1)tabs, 2)spaces, 3)empty lines;
# 2: remove short lines
def textcleanup(text):
# temp list for process
text_list = []
for s in text.splitlines():
# Strip out meaningless spaces and tabs
s = s.strip()
# Set length limit
if s.__len__() > 35:
text_list.append(s)
cleaned = os.linesep.join(text_list)
# Get rid of empty lines
cleaned = os.linesep.join([s for s in cleaned.splitlines() if s])
return cleaned
答案 0 :(得分:2)
这确实是CSS。你得到一份这样的文件:
<style>
#wrapper #PrimaryNav {margin:0;*overflow:hidden;}
a.scbbtnred{background-position:right -44px;}
a.scbbtnblack{background-position:right -176px;}
.ghsearch{width:58px;height:21px;line-height:21px;background-position:0 -80px;}
a.scbbtnred span span{background-color:#f00;background-position:0 -22px;}
</style>
<div>
<p>This bit is HTML</p>
</div>
在解析文本之前,您需要删除所有style
标记。