LLMスクレイパー:ウェブページを構造化データに変換

webスクレイピングにLLMの力を解き放つ – LLM Scraper

Web開発やデータ分析が目まぐるしく進化する現代において、インターネット上に溢れる膨大な情報から構造化されたデータを効率的に抽出することは、共通の課題となっています。そこで登場するのが、Webページからのデータ収集方法に革命をもたらす最先端のオープンソースプロジェクト「LLM Scraper」です。LLM Scraperは、TypeScriptで開発され、堅牢なPlaywrightフレームワークを基盤としており、大規模言語モデル(LLM)の能力を活用して、あらゆるWebページを構造化された、利用可能なデータに変換します。

LLM Scraperとは?

LLM Scraperは、Webコンテンツからのデータ抽出プロセスを簡素化するために設計された、汎用的なTypeScriptライブラリです。LLMの関数呼び出し機能を通じて、定義されたスキーマに基づき、情報を解釈・構造化します。前処理されたHTML、生のHTML、Markdown、さらにはマルチモーダルLLMを介したスクリーンショットからのビジュアルデータまで、LLM Scraperなら対応可能です。

主な機能とメリット

LLM Scraperは、幅広いユースケースに対応する、印象的な機能セットを備えています。

  • 幅広いLLMサポート: GPT(OpenAI)、Sonnet(Anthropic)、Gemini(Google)、Llama(Meta)、Qwenなど、主要なLLMプロバイダーと連携できます。
  • 柔軟なスキーマ定義: ZodまたはJSON Schemaを使用してデータ構造を定義し、抽出データの堅牢な型安全性を確保します。
  • Playwright基盤: エンドツーエンドテストや自動化のための強力なツールであるPlaywrightを基盤としており、信頼性の高いブラウザ操作を実現します。
  • 複数のフォーマットモード: htmlraw_htmlmarkdowntext(Readability.js経由)、image(マルチモーダルLLM用)のフォーマットをサポートし、多様なデータ入力を可能にします。
  • ストリーミングオブジェクト: 処理されたデータを段階的に取得でき、大規模データセットやリアルタイムアプリケーションに便利です。
  • コード生成: 定義したスキーマに基づいて再利用可能なPlaywrightスクリプトを生成できるユニークな機能で、定型作業を効率化します。

LLM Scraperの始め方

LLM Scraperでのデータ抽出の旅は、以下の手順で簡単に始められます。

  1. 依存関係のインストール:

    npm i zod playwright llm-scraper
    

  2. LLMの初期化: 好みのLLMプロバイダーを選択し、セットアップします。OpenAI、Anthropic、Google、Groq、Ollamaの例が提供されています。

    • OpenAIの例:
      import { openai } from '@ai-sdk/openai'
      const llm = openai.chat('gpt-4o')
      
  3. LLMScraperインスタンスの作成: 選択したLLMでスクレイパーをインスタンス化します。

    import LLMScraper from 'llm-scraper'
    const scraper = new LLMScraper(llm)
    

  4. スクレイパーの実行: Zodを使用して目的のスキーマを定義し、Playwrightページでスクレイパーを実行します。

    import { chromium } from 'playwright'
    import { z } from 'zod'
    import { openai } from '@ai-sdk/openai'
    import LLMScraper from 'llm-scraper'
    
    const browser = await chromium.launch()
    const llm = openai.chat('gpt-4o')
    const scraper = new LLMScraper(llm)
    const page = await browser.newPage()
    await page.goto('https://news.ycombinator.com')
    
    const schema = z.object({
      top: z.array(z.object({
        title: z.string(),
        points: z.number(),
        by: z.string(),
        commentsURL: z.string(),
      })).length(5).describe('Top 5 stories on Hacker News'),
    })
    
    const { data } = await scraper.run(page, schema, { format: 'html' })
    console.log(data.top)
    
    await page.close()
    await browser.close()
    

リアルタイムでのデータ処理を好む方のために、stream関数を使用すると、データの段階的な取得が可能です。

LLM Scraperへの貢献

LLM Scraperは、コミュニティ主導のプロジェクトです。開発者は、GitHubのIssueやPull Requestを通じた貢献、バグレポート、機能リクエストを歓迎しており、真に協力的なオープンソースの取り組みとなっています。

その高度な機能とユーザーフレンドリーな設計により、LLM Scraperは、AIの力を活用してWebから価値ある構造化データを効率的に抽出したい開発者、研究者、そしてあらゆる人々にとって、貴重なツールとなるでしょう。

この記事を共有