sad*_*hu_ 14 python parsing lxml
from lxml.html.clean import clean_html, Cleaner
def clean(text):
try:
cleaner = Cleaner(scripts=True, embedded=True, meta=True, page_structure=True, links=True, style=True,
remove_tags = ['a', 'li', 'td'])
print (len(cleaner.clean_html(text))- len(text))
return cleaner.clean_html(text)
except:
print 'Error in clean_html'
print sys.exc_info()
return text
Run Code Online (Sandbox Code Playgroud)
我将上面(丑陋的)代码放在一起作为我最初进入python土地的代码.我正在尝试使用lxml清理器来清理几个html页面,所以最后我只剩下文本而没有别的 - 但试试我可能,上面似乎没有这样工作,我是仍然留下了一定数量的标记(它似乎没有被破坏的html),特别是链接,它们没有被删除,尽管我使用的是args remove_tags和links=True
任何想法发生了什么,也许我用lxml咆哮错误的树?我认为这是在python中进行html解析的方法吗?
Dav*_*vid 13
不确定这个方法是否在您提出问题时存在,但如果您通过
document = lxml.html.document_fromstring(html_text)
raw_text = document.text_content()
Run Code Online (Sandbox Code Playgroud)
这应该返回html文档中的所有文本内容,减去所有标记.
Rob*_*ujo 13
大卫的解决方案连接文本没有分隔符:
import lxml.html
document = lxml.html.document_fromstring(html_string)
# internally does: etree.XPath("string()")(document)
print document.text_content()
Run Code Online (Sandbox Code Playgroud)
但是这个帮了我 - 连接我需要的方式:
from lxml import etree
print "\n".join(etree.XPath("//text()")(document))
Run Code Online (Sandbox Code Playgroud)
我想你应该看看美丽的汤.使用本文中的建议并以下列方式剥离HTML元素:
from BeautifulSoup import BeautifulSoup
''.join(BeautifulSoup(page).findAll(text=True))
Run Code Online (Sandbox Code Playgroud)
page你的html字符串在哪里?
如果您需要进一步说明,可以查看有关HTML解析的Dive into Python案例研究.