BitingSnakes/silkworm

Rust 高速化とブラウザ なりすまし機能を備えた Python 非同期ウェブスクレイピングフレームワーク

開発の材料自由に使える · MITデータ・クローリングPython難易度
760 保存
5フォーク0Issue
デモ・公式サイトをひらくbitingsnakes.github.io

中辛 の解説

Python 3.13+ で動作する非同期スクレイピングフレームワークです。wreq(ブラウザ なりすまし対応)と scraper-rs(高速 HTML パース)を基盤に、並行リクエスト制御、ミドルウェア、データパイプラインを提供します。JSON Lines・SQLite・XML・CSV など複数の出力形式に対応し、デモコードはすぐに実行できます。

こんなリポジトリです

こんなときに便利です

  • e コマース サイトから商品情報を定期的に抽出して価格比較データベースを構築する場合
  • JavaScript でレンダリングされるニュースサイトから記事を自動収集して全文検索インデックスに登録する場合
  • 複数の API エンドポイントとプロキシを組み合わせて大規模なデータセット取得を並行実行する場合

主な機能

非同期エンジンと設定可能な並行制御ブラウザ なりすまし・自動リトライ・プロキシローテーションJSON Lines・SQLite・CSV・XML など複数の出力パイプライン

ほかとの違い

Rust 統合による Python GIL 回避と free-threaded Python 対応により、Scrapy などの従来フレームワークより高速で、プロキシ・robots.txt・Cloudflare・Tor v3 対応も組み込まれています。

このリポジトリの作り方

はじめてですか? むずかしくありません — 上から順にたどれば、自分の環境で動かして味見できます。

準備するもの

  • Python 3.13 以上
  • pip または uv パッケージマネージャ

すぐに始める

  1. パッケージをインストールします。
pip install silkworm-rs
  1. Spider クラスを定義して、parse メソッドでデータを抽出します。
from silkworm import HTMLResponse, Response, Spider, run_spider
from silkworm.middlewares import RetryMiddleware, SkipNonHTMLMiddleware, UserAgentMiddleware
from silkworm.pipelines import JsonLinesPipeline

class QuotesSpider(Spider):
    name = "quotes"
    start_urls = ("https://quotes.toscrape.com/",)

    async def parse(self, response: Response):
        if not isinstance(response, HTMLResponse):
            return
        html = response
        for quote in await html.select(".quote"):
            text_el = await quote.select_first(".text")
            author_el = await quote.select_first(".author")
            if text_el is None or author_el is None:
                continue
            tags = await quote.select(".tag")
            yield {
                "text": text_el.text,
                "author": author_el.text,
                "tags": [t.text for t in tags],
            }
        if next_link := await html.select_first("li.next > a"):
            yield html.follow(next_link.attr("href"), callback=self.parse)
  1. Spider を実行し、ミドルウェアとパイプラインを設定します。
if __name__ == "__main__":
    run_spider(
        QuotesSpider,
        request_middlewares=[UserAgentMiddleware()],
        response_middlewares=[
            SkipNonHTMLMiddleware(),
            RetryMiddleware(max_times=3, sleep_http_codes=[429, 503]),
        ],
        item_pipelines=[JsonLinesPipeline("data/quotes.jl")],
        concurrency=16,
        request_timeout=10,
        log_stats_interval=30,
    )

ギット飯トライで味見

入れるのが面倒で少し不安だったなら — 安全スキャンからインストールまで、ターミナル一行で終わります。

ターミナルに貼り付ければ、ギット飯の安全スキャン → 隔離フォルダへ clone → インストール → 実行方法の案内まで自動です。はじめてでも大丈夫 — この一行だけです。

npx gitbap-try BitingSnakes/silkworm

Node.js さえあれば、インストールなしで動きます · ギット飯トライとは? →

スター推移 · 7日

767日間の増加数を計算するための比較データが不足しています

確認日時

使いやすさ · まねしやすいか

ベストサンプルサンプル評点 80/100
  • ゆるいライセンス
  • テストあり
  • サンプル集
  • 最近の更新
  • AGENTS.md
  • llms.txt
  • テンプレート

最近の更新あり · 2025 年に作成

「データ・クローリング」 こういうリポジトリを毎週受け取りませんか?

毎週月曜の朝、選んだ一膳だけ。広告なし · いつでも解除。

自分のリポジトリですか? README にギット飯バッジを貼る
[![깃밥](https://www.gitbap.com/badge/BitingSnakes/silkworm.svg)](https://www.gitbap.com/r/BitingSnakes/silkworm)
Claude からそのまま使う — ギット飯のつなぎ方

ギット飯を Claude につなぐと、こうしたリポジトリを Claude・Cursor・Codex から直接さがして試せます。

方法 ① コネクタ URL

Claude の設定 → コネクタにこのアドレスを貼り付け。

https://www.gitbap.com/api/mcp
方法 ② プラグイン(試用まで)

プラグインを入れると /gitbap-trending·/gitbap-try のスラッシュコマンドで、その場でリポジトリを試せます。Claude Code で下の 2 行を順に実行してください。

/plugin marketplace add jakeparkcolde/gitbap-cowork
/plugin install gitbap-cowork@gitbap
つなぎ方をくわしく →

AI が README をもとに要約しました · 原文を見る