はじめに
こんなに寒いのにもう8月か〜、nikkieです。
Today(※最近) I learned な小ネタです。
目次
MainContentExtractorでHTMLからメインの部分を取り出す
https://pypi.org/project/MainContentExtractor/
inline script metadataで動かします。
% uv run script.py https://nikkie-ftnext.hatenablog.com/entry/happy-birthday-emily-chang-2024 contents.md
渡したのはエミリーちゃんのお誕生日をお祝いする記事。
マークダウンで取得できています!
### はじめに [実は毎日「エミリーちゃんかわいい」しか考えてません](https://twitter.com/ftnext/status/1744258523196989579)、nikkieです。 (略)
- uv 0.5.17 (Homebrew 2025-01-10)
- Python 3.11.8
- MainContentExtractor 0.0.4
- HTTPX 0.28.1
知ったきっかけ
話題のbrowser-useが依存していて知りました。
https://github.com/browser-use/browser-use/blob/0.1.23/pyproject.toml#L16
MainContentExtractorは0.0.4というバージョンなので、攻めた採用に映ります1。
MainContentExtractorのドキュメントより
日本語のREADMEがありました。
上記スクリプトはREADMEのHowToUseをベースにしています2
trafilaturaは非常に優れたメインコンテンツ抽出ライブラリですが、必要なデータが欠落したり、HTMLを出力できないといった問題があります。
これらの問題に対処するために、本ライブラリがあります。
trafilaturaは名前だけ聞いたことがありました3。
MainContentExtractor.extract()のoutput_format引数は、マークダウン以外も指定できます4。
HTML形式の他にText形式、Markdown形式での出力もサポートしています。
マークダウンへの変換を担うのは、html2text!
https://pypi.org/project/html2text/
似たツール
過去に記事にしたFireCrawlが浮かびます
- MainContentExtractor:HTMLの取得は提供されない(HTTPXのような別ライブラリ)。マークダウン出力できる
- FireCrawl:クロール(HTML取得)も、マークダウン出力も
私がまだ触っていないだけで、似たツールは他にもあるように思います
終わりに
Pythonライブラリ MainContentExtractor で、HTMLからメインの部分を取り出せます。
- HTMLの取得は提供されない(別のライブラリを使う)
- 出力はマークダウン、HTML、プレーンテキストをサポート
リポジトリは放置気味、PyPIのバージョンよりもリポジトリが最新という状況ですが、browser-useが使っているという実績があります。
browser-useの依存で知ったMainContentExtractor。
— nikkie(にっきー) / にっP (@ftnext) 2025年1月13日
ベータやアルファって感じありますが、ユーザはBeautifulSoupで書くのと同じ量の記載で、HTMLのmainだけとれてそうhttps://t.co/dxzk5FQ1zH
日本語READMEもありました
- リポジトリを見ると、0.0.4の後にプルリクマージされてますがリリースはなさそうで、もしやうち捨てられているのかもしれません↩
-
宿題事項の1つ:
response.encoding = "utf-8"と代入して常に問題ないのか(心配してるのはencodingがutf-8でないとき)↩ - 聞いた勉強会 ↩
- ref: https://github.com/HawkClaws/main_content_extractor/blob/6f23968db3c9223dc25547ac1e0f68dcdeea6ec2/main_content_extractor/main_content_extractor.py#L30↩