linkedin-scraper について
認証済み Chrome セッションを使い、LinkedIn のプロフィール、検索結果、企業ページを取得するスキルです。連絡先や企業情報を構造化する作業向けに、レート制限や結果処理の指針も含みます。
主な機能
- 01プロフィールと検索結果の取得
- 02企業ページと従業員リストの抽出
- 03構造化 JSON の出力
- 04DuckDB への任意保存
- 05レート制限とエラー処理の指針
活用シーン
- 01LinkedIn 検索から候補連絡先を整理
- 02プロフィールの職歴や学歴を収集
- 03企業情報と従業員リストを取得
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ aspenas/ ironclaw-skills --skill linkedin-scraperインストール後、Claude Code で/linkedin-scraperを入力して読み込まれたか確認します。
詳細
LinkedIn スクレイパー — Chrome プロファイルによるウェブスクレイピング
ユーザーが認証済みの Chrome ブラウザーセッションを使って、LinkedIn のプロフィールと検索結果をスクレイピングします。API キーは不要です。Chrome プロファイルリレーを使うブラウザーツールを使用します。
前提条件
- LinkedIn にログイン済みの Chrome ブラウザー
- ブラウザーリレーに接続済み(Chrome 拡張機能または openclaw ブラウザープロファイル)
- 結果の保存用 DuckDB ワークスペース(任意)
基本的なワークフロー
1. 単一プロフィールのスクレイピング
browser → open LinkedIn profile URL
browser → snapshot (extract structured data)
→ Parse: name, headline, title, company, location, education, experience, connections, about
→ Return structured JSON or insert into DuckDB
2. 検索と一括スクレイピング
browser → open LinkedIn search URL with filters
browser → snapshot (extract result cards)
→ Parse each result: name, title, company, profile URL
→ For each profile URL: open → snapshot → parse full profile
→ Batch insert into DuckDB
3. 企業ページのスクレイピング
browser → open LinkedIn company page
→ Parse: company name, industry, size, description, specialties, employee count
→ Navigate to /people tab for employee list
実装ルール
レート制限(重要)
- ページの読み込み間に最低 3~5 秒の遅延を設けてください
- 1 セッションあたり最大 80 件のプロフィール(LinkedIn のレート制限)
- 検出を避けるため、3~8 秒の間で遅延をランダム化してください
- 20 件のプロフィールごとに、60 秒間休止してください
- CAPTCHA または「不審なアクティビティ」が検出された場合は、ただちに停止してユーザーに通知してください
ステルスパターン
- 自然なスクロールを行ってください(ゆっくり下にスクロールし、いったん止めてから、さらにスクロールします)
- 同じ検索結果ページを 2 回を超えてスクレイピングしないでください
- プロフィールを訪問する順番を変えてください(順番どおりに訪問しないでください)
- 定期的にタブを閉じて、再度開いてください
データ抽出 — プロフィールページ
LinkedIn のプロフィールのスナップショットから、次のフィールドを抽出します。
| フィールド | 場所 | 備考 |
|---|---|---|
| name | メインの見出し h1 | 氏名 |
| headline | 名前の下 | 通常は役職+企業名 |
| location | 場所のセクション | 市区町村、州/国 |
| current_title | 職歴セクションの最初の項目 | 最新の役職 |
| current_company | 職歴セクションの最初の項目 | 企業名 |
| education | 学歴セクション | 学校、学位、在籍期間 |
| connections | つながりの数 | 数値または「500+」 |
| about | 概要セクション | 自己紹介文(「さらに表示」のクリックが必要な場合があります) |
| experience | 職歴セクション | すべての職歴と在籍期間 |
| profile_url | ブラウザーの URL バー | 正規の LinkedIn URL |
データ抽出 — 検索結果
LinkedIn の検索結果ページから、次の項目を抽出します。
| フィールド | 場所 |
|---|---|
| name | 検索結果カードの見出し |
| headline | カード内の名前の下 |
| location | カードのメタデータ |
| profile_url | 名前に設定されたリンクの href |
| mutual_connections | カードのフッター |
検索 URL のパターン
# People search
https://www.linkedin.com/search/results/people/?keywords={query}
# With filters
&geoUrn=%5B%22103644278%22%5D # United States
&network=%5B%22F%22%2C%22S%22%5D # 1st + 2nd connections
¤tCompany=%5B%22{company_id}%22%5D # Current company
&schoolFilter=%5B%22{school_id}%22%5D # School filter
# YC founders (common query)
https://www.linkedin.com/search/results/people/?keywords=Y%20Combinator%20founder
# Company employees
https://www.linkedin.com/company/{slug}/people/
DuckDB との連携
DuckDB に保存する場合は、Ironclaw ワークスペースのデータベースを使用してください。
-- Check if leads/contacts object exists
SELECT * FROM objects WHERE name = 'leads' OR name = 'contacts';
-- Insert via the EAV pattern or direct pivot view
INSERT INTO v_leads ("Name", "Title", "Company", "LinkedIn URL", "Location", "Source")
VALUES (?, ?, ?, ?, ?, 'LinkedIn Scrape');
適切なオブジェクトが存在しない場合は、作成してください。
-- Use Ironclaw's object creation pattern from the dench skill
エラー処理
| エラー | 対応 |
|---|---|
| 「サインイン」ページ | LinkedIn のセッションが期限切れです。Chrome で再ログインするようユーザーに通知してください |
| CAPTCHA/セキュリティチェック | ただちに停止し、30 分以上待ってからユーザーに通知してください |
| 「プロフィールが見つかりません」 | スキップし、URL を無効として記録してください |
| レート制限(429) | 停止し、15 分待ってから、さらに長い遅延を設定して再試行してください |
| 空のスナップショット | ページの読み込み中です。3 秒待ってから、再度スナップショットを取得してください |
出力形式
JSON(デフォルト)
{
"name": "Jane Doe",
"headline": "CEO at Acme Corp",
"current_title": "CEO",
"current_company": "Acme Corp",
"location": "San Francisco, CA",
"linkedin_url": "https://www.linkedin.com/in/janedoe",
"connections": "500+",
"education": [{"school": "Stanford", "degree": "BS CS", "years": "2010-2014"}],
"experience": [{"title": "CEO", "company": "Acme Corp", "duration": "2020-Present"}],
"scraped_at": "2026-02-17T14:30:00Z"
}
進捗レポート
一括スクレイピングでは、進捗を報告してください。
Scraping: 15/50 profiles (30%) — Last: Jane Doe (Acme Corp)
Rate: ~4 profiles/min — ETA: 9 min remaining
安全性
- 非公開または閲覧制限付きのプロフィールはスクレイピングしないでください
- 公開ページについては LinkedIn の robots.txt を遵守してください
- データはローカル(DuckDB)のみに保存し、外部へ持ち出さないでください
- ユーザーは LinkedIn に正当なアクセス権を持っている必要があります
- このツールは、ユーザー自身による大規模な手動ブラウジングを支援します
コメント
Markdown 対応