Python版本的Readability HTML解析器
项目描述
breadability - 另一个Python (v2.6-v3.3) 可读性端口
我尝试与一些古老的代码库的多个分支进行合作,这些分支将readability 端口到Python。其他Python端口的测试不足、未使用的正则表达式和注释掉的代码部分让我非常头疼。
我努力将几个更好的分支合并到一个代码库中,但它们已经分歧太大,我无法与它们合作。
那么一个理智的人会怎么做呢?用自己的仓库重新端口,添加一些测试、基础设施,并尝试使这个端口更好。开源万岁(是的,我是NPISH,但哦,好吧,我确实尝试了)
这是一个相当直接的JS端口
http://code.google.com/p/arc90labs-readability/source/browse/trunk/js/readability.js#82
http://www.minvolai.com/blog/decruft-arc90s-readability-in-python/
替代品
安装
这取决于lxml,因此您需要一些C头文件,以便从pip安装东西,以便它可以编译。
$ [sudo] apt-get install libxml2-dev libxslt-dev
$ [sudo] pip install git+git://github.com/bookieio/breadability.git
测试
$ nosetests-2.6 tests && nosetests-3.2 tests && nosetests-2.7 tests && nosetests-3.3 tests
使用方法
命令行
$ breadability http://wiki.python.org/moin/BeginnersGuide
选项
b会将解析后的内容写入临时文件,并在浏览器中打开以供查看。
d会将调试评分语句写入,以帮助跟踪为什么选择某个节点作为文档以及为什么某些节点被从最终产品中删除。
f将覆盖获取HTML片段(<div>)的默认行为,并返回完整的<html>文档。
v将在详细调试模式下输出,并帮助您了解为什么以这种方式解析。
Python API
from __future__ import print_function
from breadability.readable import Article
if __name__ == "__main__":
document = Article(html_as_text, url=source_url)
print(document.readable)
要完成的工作
是的,我有一些追赶的工作要做。我不做分页,我有很多自定义调整需要开始,有些文章无法解析。我还需要在许多清洁辅助工具上编写更多测试,但希望这些可以/将被添加。
幸运的是,我需要这个库来构建我的工具
所以我真的需要这个项目是活跃和不断改进的。
根据我脑海中的待办事项列表
支持从解析的文章中提取元数据[URL、置信度评分、所有我们认为的候选者?]
更多测试,更全面的测试
更多需要在test_articles中进行测试的样本文章
运行以检查test_articles回归的测试
整理输出的HTML,可能有助于回归测试^^
多页文章
性能调整,我们进行了很多循环,重新删除了一些应该跳过的节点。我们应该有一组回归测试,这样如果我们实施了一个导致性能下降的更改,我们就可以立即知道。
更多文档,但是sphinx文档和代码注释,帮助我们了解我们在做什么以及为什么这样做。这是许多这些东西的最大障碍。
灵感
breadability的变更日志
0.1.20(2014年4月13日)
不要将测试包含在sdist构建中。
0.1.19(2014年4月13日)
用chardet替换charade以简化包装。
0.1.18(2014年4月6日)
改进了将页面解码为Unicode的解码。
0.1.17(2014年1月22日)
将更多日志降低到INFO级别而不是WARN级别。
0.1.16(2014年1月22日)
清理在非真正警告时的日志输出。
0.1.15(2013年11月29日)
将breadability 0.1.14的更改合并到分支https://github.com/miso-belica/readability.py,并进行调整以返回breadability名称。
分支:添加了属性Article.main_text,用于获取带有语义HTML标签(<em>、<strong>等)注解的文本。
分支:将具有相同类型的1个子节点的节点连接起来。从<div><div>...</div></div>我们得到<div>...</div>。
分支:如果它包含<p>元素,则不要将<div>更改为<p>。
分支:将测试生成辅助工具‘readability_newtest’重命名为‘readability_test’。
分支:将包重命名为readability。(已重命名回来)
分支:添加了对Python >= 3.2的支持。
分支:使用与Py3k兼容的包‘charade’而不是‘chardet’。
0.1.14(2013年11月7日)
仅在兄弟元素不存在时更新兄弟元素。
0.1.13(2013年8月31日)
提高内容中图像的存活机会。
添加测试。
0.1.12(2013年7月28日)
请求中添加用户代理。
0.1.11(2012年12月12日)
将argparse添加到Python < 2.7的安装需求中。
0.1.10(2012年9月13日)
更新评分奖励和惩罚,使用逗号和引号。
0.1.9(2012年8月27日)
如果处理候选人的问题时需要采取行动,就像我们没有为文章内容找到任何候选人一样。#10
0.1.8(2012年8月27日)
为空文档添加代码/测试。
修复了#9,以处理XML解析问题。
0.1.7(2012年7月21日)
将编码的'replace'关键字参数改为旧版Python的正常参数。
0.1.6(2012年6月17日)
修复链接移除问题,添加测试和用于处理其他不良链接的位置。
0.1.5(2012年6月16日)
开始在条件清理状态下查看从内容中移除不良链接。这实际上用于scripting.com网站的垃圾。
0.1.4(2012年6月16日)
添加测试生成辅助脚本readability_newtest。
为scripting新闻解析失败添加测试和修复。
0.1.3(2012年6月15日)
添加对完整文章的实际测试以进行回归测试。
更新解析器,以便在选择获胜文档节点后正确清理。
0.1.2(2012年5月28日)
错误修正:#4问题与评分中的100字符奖励点的逻辑
使用PyLint/PEP8进行花园式编码。
为readable/scoring代码添加大量测试。
0.1.1(2012年5月11日)
修复评分中的错误,以帮助获取正确的内容
添加-d概念,显示节点上的评分/决策
更新命令行客户端,以便将输出管道传输到其他工具
0.1.0(2012年5月6日)
首次发布并上传到PyPi
项目详细信息
breadability-0.1.20.tar.gz的散列值
算法 | 散列摘要 | |
---|---|---|
SHA256 | f1a7fdad1e58e295df80954879143824c706bbfb1826cdf4b1d15de1a86afe99 |
|
MD5 | 57903360c77f4603d634511566ef1595 |
|
BLAKE2b-256 | ad2dbb6c9b381e6b6a432aa2ffa8f4afdb2204f1ff97cfcc0766a5b7683fec43 |