Readability.py¶
本项目是 Mozilla 的 readability 库的 Python 封装。它能从杂乱的网页 HTML 中提取出核心的正文内容,就像浏览器的“阅读模式”一样。
与 readability-python 和 readability-lxml 这种 “python port” 相反,本项目更接近一个 “python wrapper”:它把 Python API 包在 JavaScript 实现外层,而不是在 Python 里重写整套提取逻辑。
以下内容基本上是 AI 生成的,我还没校对,可能质量不高
Features¶
- High Fidelity: 直接调用 JavaScript 实现,尽量跟随上游
@mozilla/readability的行为。 - Cross Runtime: 既支持标准的 CPython 环境,也支持 Pyodide(浏览器/WASM)环境。
- Easy to Use: 简单的 Python API,开箱即用。
Implementation¶
这是一个典型的 Polyglot 项目。
- 在 CPython 环境下,当前实现会按
stpyv8 -> mini-racer -> pythonmonkey -> node_subprocess的顺序尝试 JavaScript 执行后端;README 里仍主要用pythonmonkey举例说明。 - 在 Pyodide 环境下,它会切换到
pyodide后端,复用浏览器侧的 JavaScript 运行环境。
My Clever Bits (我的巧思)¶
我没有选择用 Python 重写 Readability 的逻辑,而是选择了 "Run JS in Python" 的方案。
代码会先通过 sys.platform == 'emscripten' 区分 Pyodide 环境;非 emscripten 时,再按多个 JS 后端的可用性顺序回退。这使同一套 Python API 能复用到浏览器和常规 Python 环境。
Deep Insight (深入洞见)¶
这个项目展示了 Language Interoperability 的强大威力。
适配层并不只在 src/readability/__init__.py;__init__.py 更多是 API 导出,真正的包装逻辑分布在 api/parse.py 和 impl/* 里。整体思路仍然是把 Python 的 HTML 字符串和选项传给 JavaScript 侧实现,再把返回结果映射成 Python 的 Article dataclass。
这种设计把上游行为复用和 Python API 暴露拆开了,维护重点更多落在适配层,而不是重写解析算法。
Related Projects¶
- Html2Text: 另一个处理 HTML 的工具,将 HTML 转换为 Markdown。