🎯 カスタマイズ可能で検出回避型のクラウドブラウザ。自社開発のChromiumを搭載し、ウェブクローラーAIエージェント向けに設計されています。👉今すぐ試す
ブログに戻ります

resiliparse ウェブスクレイピング: 高速HTMLからテキストへの抽出

Emily Chen
Emily Chen

Advanced Data Extraction Specialist

23-Jul-2026

TL;DR:

  • resiliparseはHTMLを迅速にクリーンなテキストに変換します。 ウェブアーカイブを数十億ページの規模で処理するために構築されたC++の抽出コアを使用しています。
  • main_content=Trueは余分な部分を削除します。 ナビゲーション、ログイン、フッターのクロームを含まない記事テキストを返します。
  • resiliparseは取得を行いません。 HTTPクライアントを持たず、JavaScriptを実行せず、マークアップを渡せば抽出します。
  • ギャップは一つのスクリプトで現れます。 JavaScriptでレンダリングされたデモページのプレーンGETは23文字のテキストを返しますが、js_renderを使用してScrapeless Universal Scraping APIを通じて取得した同じURLは実際のコンテンツを返します。
  • このガイドの抽出は実際です。 ライブ実行により、10,968文字のレンダリングされたHTMLが1,469文字のクリーンなメインコンテンツテキストに削減されました。
  • 取得側でのスタートは無料です。 app.scrapeless.comでScrapeless APIキーを作成しましょう。

resiliparseとは何か、何ではないか

resiliparseは、ChatNoir Resiliparseツールキットの解析および抽出部分で、ウェブアーカイブ研究グループによって構築され、Common Crawlおよび類似のコーパスを処理します。HTMLからテキストへの抽出はC++コアで行われるため、インプットが1つの文書ではなく数百万の文書であっても高速に保たれます。最もよく使用される機能はextract_plain_textで、main_content=Trueモードが有用な部分です:ナビゲーション、サイドバー、フッターを削除し、生のテキストダンプを雑音にせず、読者が実際に求めているコンテンツを残します。

これは抽出ライブラリであり、スクレイパーではありません。resiliparseはHTTPクライアントを持たず、セッションを保持せず、JavaScriptを実行しません。文字列またはバイトを渡せばテキストを返し、URLを取得するように求めてもそのメソッドはありません。したがって、すべての「resiliparseウェブスクレイピング」セットアップは2つのレイヤーになります:忠実なHTMLを返すものと、そのHTMLから抽出するresiliparseです。このガイドは最初のレイヤーにScrapeless Universal Scraping APIを使用します。なぜなら、プレーンHTTPクライアントはJavaScriptでコンテンツを構築するページでプリレンダーマークアップを返すからです。空のマークアップは空のテキストに抽出されます。読みやすいテキストではなく構造化されたフィールドについては、Pythonウェブスクレイピングチュートリアルがセレクターベースのルートをカバーします。

インストール

resiliparseとrequestsがツールチェーン全体です。このガイドが書かれたバージョンはresiliparse 1.0.9です:

bash Copy
pip install "resiliparse==1.0.9" requests

キーは環境に保持し、ソースには決して含めないでください:

bash Copy
export SCRAPELESS_API_KEY="sk_your_scrapeless_key"

抽出する価値のあるHTMLを取得

抽出品質は取得の忠実さによって制約されるので、まずそこから始めます。JavaScriptでレンダリングされたページでは、プレーンHTTPクライアントが受け取るマークアップはコンテンツを含んでおらず、DOMを構築するスクリプトの後にのみ到着します。このライフサイクルはHTMLスクリプティング仕様によって定義されています。一つのスクリプトで、resiliparseが各々から何を取得するかを示します:

python Copy
# fidelity.py — resiliparseが抽出するもの:プレーンGET対サーバーサイドレンダリング
import os

import requests
from resiliparse.extract.html2text import extract_plain_text

URL = "https://quotes.toscrape.com/js/"
MARKER = "The world as we have created it"

plain = requests.get(URL, timeout=60).text
plain_text = extract_plain_text(plain, main_content=True)
print("プレーンテキスト文字数:", len(plain_text), "| 引用文あり:", MARKER in plain_text)

resp = requests.post(
    "https://api.scrapeless.com/api/v2/unlocker/request",
    headers={"Content-Type": "application/json", "x-api-token": os.environ["SCRAPELESS_API_KEY"]},
    json={"actor": "unlocker.webunlocker", "input": {"url": URL, "js_render": True}},
    timeout=120,
)
resp.raise_for_status()
rendered_text = extract_plain_text(resp.json().get("data", ""), main_content=True)
print("レンダリングされたテキスト文字数:", len(rendered_text), "| 引用文あり:", MARKER in rendered_text)

プレーン取得はほとんど何も抽出せず、レンダリングされたものは実際のコンテンツを持っています:

text Copy
プレーンテキスト文字数: 23 | 引用文あり: False
レンダリングされたテキスト文字数: 1435 | 引用文あり: True

レンダリング、アンロック、およびプロキシルーティングは、あの1回のPOSTでサーバーサイドで発生します。 Universal Scraping APIは取得レイヤーであり、レンダリングされたバイトがresiliparseがそこから抽出するべき対象です。

クリーンなテキストを抽出

実際のHTMLを手に入れたら、resiliparseは抽出を行います。デフォルトで1回、main_content=Trueで1回実行して、ボイラープレートが取り除かれる様子を見てください:

python Copy
# extract.py — フルテキスト対メインコンテンツ抽出
import os

import requests

resiliparse.extract.html2textから extract_plain_text をインポートします。

resp = requests.post(
"https://api.scrapeless.com/api/v2/unlocker/request",
headers={"Content-Type": "application/json", "x-api-token": os.environ["SCRAPELESS_API_KEY"]},
json={"actor": "unlocker.webunlocker", "input": {"url": "https://quotes.toscrape.com/", "js_render": True}},
timeout=120,
)
resp.raise_for_status()
html = resp.json().get("data", "")

full = extract_plain_text(html)
main = extract_plain_text(html, main_content=True)
print("レンダリングされたHTML文字数:", len(html))
print("全文文字数:", len(full))
print("メインコンテンツ文字数:", len(main))
print("最初の引用がある:", "The world as we have created it" in main)

Copy
この実行は、10,968文字のHTMLを読みやすいテキストに変換し、`main_content`はさらにクロームを削減します:

```text
レンダリングされたHTML文字数: 10968
全文文字数: 1674
メインコンテンツ文字数: 1469
最初の引用がある: True

これが全体のパイプラインです:取得とレンダリングのための1つのPOST、抽出のための1つの呼び出し。main_content=Trueは、出力を言語モデルや検索インデックスにクリーンにフィードするためのものであり、完全なテキストダンプで生き残るナビゲーションやログインプロンプトはなくなり、引用文のテキストが残ります。

無料プランでAPIキーを取得: app.scrapeless.com

高度なパターン

  • エンコーディングが不確かなときは、デコードされた文字列ではなくバイトを渡します。 resiliparseはドキュメントからエンコーディングを検出します;生のレスポンスバイトを渡すことで、非ASCIIテキストを損なう二重デコードを避けます。
  • 詳細を保持または削除するためにalt_textsおよびlinksフラグを使用します。 extract_plain_textは、必要なときに画像のaltテキストやリンクターゲットを保持し、不要なときにそれらを省略するフラグを受け入れます。
  • ツリーが必要なときはresiliparse.parse.htmlに手を伸ばします。 ツールキットはHTMLツリーとセレクタAPIも公開しているため、プレーンテキストが不十分なときに同じ高速コアから構造化されたフィールドを抽出できます。
  • 取得と抽出のステップを分けておきます。 抽出はCPUバウンドで、取得はIOバウンドです;ページを最初にプルしてから、バッチに対して抽出を実行することで、どちらもお互いを待つことがありません。

トラブルシューティング

  • ブラウザで見ることができるページからほとんどテキストが得られない。 コンテンツがJavaScriptでレンダリングされており、取得したのは事前レンダリングされたHTMLです。最初のスクリプトの23文字の結果はまさにこのケースです;js_renderで取得層で修正します。
  • 出力にナビゲーションやフッターのテキストが含まれる。 main_content=Trueなしでextract_plain_textを呼び出しました。ボイラープレートを削除するためにそれをオンにします。
  • アクセント付きの文字が乱れている。 resiliparseに誤ってデコードされた文字列を渡しました。レスポンスバイトを渡して、エンコーディングを検出させます。
  • 希望していたコンテンツがトリミングされた。 main_contentは意図的に攻撃的です。構造が異常なページの場合、完全なテキスト出力と比較し、メインコンテンツパスが過剰にドロップする場合は、そこに戻ります。

結論

resiliparseは、スケールする抽出層としての地位を確立します:HTMLを迅速にクリーンテキストに変換するC++コアと、クロームを取り除くmain_contentモード。可能かどうかを決定する層は取得であり、最初のスクリプトの23文字対1,435文字の分割がそれを決定します—そして、サーバーレンダリングされた1つのPOSTがそのギャップを埋めます。両者を接続すると、レンダリングされたページはインデックスまたはモデルのために準備されたクリーンなテキストになります。

無料のScrapelessアカウントを作成してAPIキーを取得し、開発者ドキュメントunlocker.webunlockerパラメータをカバーします。定期的なジョブを計画する場合はScrapelessの価格を確認してください。

FAQ

Q: resiliparseは自分でウェブサイトをスクレイピングできますか?

いいえ。resiliparseは既にあるHTMLからテキストを抽出します;HTTPクライアントを持っておらず、JavaScriptを実行しません。取得層と組み合わせて使用します — ここではScrapeless Universal Scraping APIがサーバーサイドでページをレンダリングし、resiliparseが返されたバイトからテキスト抽出を処理します。

Q: resiliparseはtrafilaturaのようなボイラープレート除去ツールとどう違いますか?

どちらもボイラープレートを除去しますが、resiliparseはWebアーカイブ研究グループから派生したもので、コーパススケールのスループットのためにC++で構築されており、WARCファイルを読み取り、エンコーディングと言語を検出するような広範なツールキットの一部として提供されています。多くのドキュメント全体の速度が制約となる場合に利用してください。

Q: main_content=Trueは実際に何をしますか?
内容抽出のパスを実行し、主要な記事テキストを保持し、ナビゲーション、サイドバー、ヘッダー、フッターを削除します。このガイドの比較では、トリミングされた出力とフルテキストの出力を示し、何が削除されるかを確認できます。

Q: resiliparseはJavaScriptレンダリングされたページを処理できますか?

単独ではできません — スクリプトは実行されません。コンテンツが初期HTMLの後に読み込まれる場合、通常のフェッチではほとんど何も抽出されず、23文字の結果が示しています。まずjs_renderを使ってScrapeless API経由でページを取得し、その後抽出します。

Q: resiliparseを使ったスクレイピングは合法ですか?

抽出ライブラリは収集ルールを変更しません。公共のページのみを取得し、サイトの利用規約およびロボット排除プロトコルで標準化されたロボット指令を尊重し、ボリュームを制限し、適用される法律に従って個人データを扱ってください。

Scrapelessでは、適用される法律、規制、およびWebサイトのプライバシーポリシーを厳密に遵守しながら、公開されているデータのみにアクセスします。 このブログのコンテンツは、デモンストレーションのみを目的としており、違法または侵害の活動は含まれません。 このブログまたはサードパーティのリンクからの情報の使用に対するすべての責任を保証せず、放棄します。 スクレイピング活動に従事する前に、法律顧問に相談し、ターゲットウェブサイトの利用規約を確認するか、必要な許可を取得してください。

最も人気のある記事

カタログ