html文章清理器/提取器,五个过滤器兼容。

ftr的Python项目详细描述


#python ftr

ftr是[five filters extractor]的partial(re-)实现 ](http://fivefilters.org/)在python中。

它清理HTML网页并提取其内容和元数据 更舒适的阅读体验(或任何你需要的)。它使用 要解析的配置文件的集中化和互惠化存储库 尽可能精确的网站,并退回到众所周知的 可读性如果未找到配置,则自动提取程序。

一个显著的区别是,这个python实现将获取 从Internet上的集中存储库在 如果在本地找不到配置,则运行。

[有完整的文档](http://python-ftr.readthedocs.org)。

##与fivefilters php实现的区别

python ftr: -目前只有一个解析器库(lxml)。html5lib尚未移植。 -不将日期字符串转换为对象。我觉得这样更灵活,可以在上层处理它们,让用户能够访问定制的解析器。如果我实现了将自定义解析函数传递给提取器,这种情况可能会改变。 -使用[可读性lxml](https://github.com/buriy/python-readability)在非自动正文提取之后进行清理。即使它是arc90的readability.js的一个端口,就像5个过滤器使用的[php readability port](https://github.com/wallabag/wallabag/blob/master/inc/3rdparty/libraries/readability/Readability.php)一样,它最终也可能产生不同的结果,因为它们计算内容权重的方式不同(我没有按代码比较)。 -在没有可用的站点配置时不会回退到自动分析,但在找到配置并失败时会部分回退。由于python ftr是为了包含在复杂的解析链中而创建的,因此当当前站点没有配置时,我们不需要自动解析。详情见下文。 -没有指纹支持。这个特性看起来还没有完成,或者至少没有足够的文档让我在原始代码中理解它。 -完全不使用globalfive filters配置文件。.txt看起来未维护,通用回退仍可以在此模块之外实现:使用api时,可以通过参数提供自己的全局配置。

##自动提取

如果您需要在未找到配置的情况下进行全自动分析-这很容易检测到,因为process()和低级API提高了siteconfignotfound-只需使用可读性lxml可浏览性python goose汤过滤器或任何适合您的方法。

在A^ { STR 1 } $现有配置但解析失败< /强>的原因中,我们仍然尊重 AutoTraceTyOnOpReult并尝试通过可读性LXML/CITE >提取标题正文。

这并不像php实现那样有特色,php实现试图通过其他方式提取日期、语言和作者,但仍然比什么都没有要好。

使用自动提取时,ContentExtractor实例将具有一个.failures属性,精确列出哪些非自动提取失败。

如果找到配置但没有sitebody指令(例如,应明确使用自动提取),则如果自动提取成功,则不会设置failures属性。

##待办事项

有关动态todo列表,请参见[问题愿望列表](/1flow/python ftr/labels/wishlist)。

##许可证

GNU Affero GPL版本3。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java应该考虑使用DTO来代替Spring控制器层吗?   java为什么要将Maven与Git结合起来?   java试图将CSV转换为XLSX,但使用了错误的逗号拆分列   mysql Spring 3+Hibernate:java。sql。BatchUpdateException:无法添加或更新子行(ManyToMany)   java基本字符串反转器   java无法使用RestControllerAdvice为身份验证失败生成自定义错误消息   java当只允许SQLException时,如何抛出EOFEException?   java如何创建播放模块?   Android中匿名类的java实例化异常问题   java两个停靠组件,其中第二个组件填充剩余空间   java如何在按钮延迟时启用它   Java中正在运行的应用程序中的后台进程   java我正试图从一个字符串打印出这个字符输出   如何使用java socket通过两个不同的wifi连接两台电脑?   javaapachecamel:如何将分层数据从数据库转换为pojo   java Webrtc:OniconConnectionChange和onConnectionChange之间有什么区别   java如何重写已经创建的JTable方法   爪哇扫雷机堆垛机   雅加达ee Java ee EJB 3.0 Glassfish