从HTML中提取文本
项目描述
HTML到文本
从HTML中提取文本
免费软件:MIT许可证
html_text与LXML的.xpath('//text()')或Beautiful Soup的.get_text()有何不同?
使用html_text提取的文本不包含内联样式、javascript、注释和其他用户通常看不到的文本;
html_text会标准化空白字符,但比.xpath('normalize-space())')更智能,会在内联元素周围添加空格(这些元素通常在HTML标记中用作块元素),并尝试避免为标点符号添加额外的空格;
html-text可以添加换行符(例如,在标题或段落之后),这样输出文本看起来更像是浏览器中的渲染效果。
安装
使用pip安装
pip install html-text
该包依赖于lxml,因此您可能需要安装额外的包:[http://lxml.de/installation.html](http://lxml.de/installation.html)
用法
从HTML中提取文本
>>> import html_text >>> html_text.extract_text('<h1>Hello</h1> world!') 'Hello\n\nworld!' >>> html_text.extract_text('<h1>Hello</h1> world!', guess_layout=False) 'Hello world!'
传入的HTML首先会从不可见的非文本内容(如样式)中清理,然后提取文本。
您还可以传入已经解析的 lxml.html.HtmlElement
>>> import html_text >>> tree = html_text.parse_html('<h1>Hello</h1> world!') >>> html_text.extract_text(tree) 'Hello\n\nworld!'
如果您愿意,可以手动处理清理;在这种情况下使用低级别的 html_text.etree_to_text
>>> import html_text >>> tree = html_text.parse_html('<h1>Hello<style>.foo{}</style>!</h1>') >>> cleaned_tree = html_text.cleaner.clean_html(tree) >>> html_text.etree_to_text(cleaned_tree) 'Hello!'
parsel.Selector对象也受到支持;您可以为只从特定元素中提取文本定义一个parsel.Selector
>>> import html_text >>> sel = html_text.cleaned_selector('<h1>Hello</h1> world!') >>> subsel = sel.xpath('//h1') >>> html_text.selector_to_text(subsel) 'Hello'
注意:parsel.Selector对象不会自动清理,您需要先调用 html_text.cleaned_selector
主要函数和对象
html_text.extract_text 接受HTML并返回提取的文本。
html_text.etree_to_text 接受解析的lxml Element并返回提取的文本;这是一个低级别函数,这里不处理清理。
html_text.cleaner 是一个 lxml.html.clean.Cleaner 实例,可以与 html_text.etree_to_text 一起使用;其选项针对速度和文本提取质量进行了调整。
html_text.cleaned_selector 接受HTML作为文本或作为 lxml.html.HtmlElement,并返回清理后的 parsel.Selector。
html_text.selector_to_text 接受 parsel.Selector 并返回提取的文本。
如果 guess_layout 为True(默认值),则在新行标记前后添加换行符,在双换行标记前后添加两个换行符。这种启发式方法使得提取的文本更类似于在浏览器中的渲染方式。默认的新行和双换行标记可以在 html_text.NEWLINE_TAGS 和 html_text.DOUBLE_NEWLINE_TAGS 中找到。
您可以使用 newline_tags 和 double_newline_tags 参数(默认为 html_text.NEWLINE_TAGS 和 html_text.DOUBLE_NEWLINE_TAGS)自定义添加换行的方式。例如,不要在 <div> 标签后添加换行符
>>> newline_tags = html_text.NEWLINE_TAGS - {'div'} >>> html_text.extract_text('<div>Hello</div> world!', ... newline_tags=newline_tags) 'Hello world!'
除了从页面中获取文本(例如,用于显示或搜索)之外,此库的一个预期用途是用于机器学习(特征提取)。如果您想将HTML页面的文本作为特征(例如,用于分类),此库为您提供可以随后输入到标准文本分类管道中的纯文本。如果您认为您还需要HTML结构,请查看 webstruct 库。
历史记录
0.6.2 (2024-05-01)
通过使用迭代而不是递归来支持更深的树。
0.6.1 (2024-04-23)
修复了HTML注释和处理指令的处理。
在setup.py中使用 lxml-html-clean 代替 lxml[html_clean],以避免 https://github.com/jazzband/pip-tools/issues/2004
0.6.0 (2024-04-04)
将Git存储库移动到 https://github.com/zytedata/html-text。
添加了对Python 3.9-3.12的官方支持。
移除了对Python 2.7和3.5-3.7的支持。
将lxml依赖项切换到 lxml[html_clean],以支持 lxml >= 5.2.0。
从Travis CI切换到GitHub Actions。
CI改进。
0.5.2 (2020-07-22)
处理lxml Cleaner异常(针对 https://bugs.launchpad.net/lxml/+bug/1838497 的解决方案);
支持Python 3.8;
测试改进。
0.5.1 (2019-05-27)
修复了当 guess_punct_space 为False时的空格处理:html-text在换行后生成不必要的空格。
0.5.0 (2018-11-19)
在此版本中删除了parsel依赖项,尽管parsel仍然受到支持。
parsel 包不再是安装和使用html-text所必需的;
html_text.etree_to_text 函数允许从lxml Elements中提取文本。
html_text.cleaner 是一个针对文本提取速度和质量调优的 lxml.html.clean.Cleaner 实例;
测试和文档改进;
支持 Python 3.7。
0.4.1 (2018-09-25)
修复了 0.4.0 版本中的回归问题:当使用具有文本但没有子节点的节点调用 html_text.extract_text 时,文本为空。
0.4.0 (2018-09-25)
这是一个不兼容的版本:默认情况下,html_text 函数现在会在元素后添加换行符(如果适用),以便提取的文本看起来更接近在浏览器中的渲染方式。
要关闭此功能,请将 guess_layout=False 选项传递给 html_text 函数。
guess_layout 选项用于使提取的文本看起来更接近在浏览器中的渲染方式。
添加了针对真实网页的布局提取测试。
0.3.0 (2017-10-12)
公开了对选择器进行操作的函数,使用 .//text() 从选择器提取文本。
0.2.1 (2017-05-29)
打包修复(包括 CHANGES.rst)
0.2.0 (2017-05-29)
修复了内联标签引起的单词不想要的连接:也为内联标签添加了空格,但使用启发式方法来保留标点符号,而不会添加额外的空格。
接受解析的 HTML 树。
0.1.1 (2017-01-16)
添加了 Travis-CI 和 codecov.io 集成。
0.1.0 (2016-09-27)
PyPI 上的第一个版本。
项目详情
下载文件
下载适用于您平台的应用程序。如果您不确定选择哪个,请了解更多关于 安装包 的信息。