CAPSOLVER
ブログ
C#によるWebスクレイピング:2025年ステップバイステップチュートリアル

C#によるWebスクレイピング:2025年ステップバイステップチュートリアル

Logo of CapSolver

Emma Foster

Machine Learning Engineer

23-Jan-2025

ウェブスクレイピング、C#、Capsolver

ウェブサイトのスクレイピング、CAPTCHAの処理、さらにはスクリーンショットの取得方法を分かりやすくご紹介します!


なぜC#でウェブスクレイピングなのか?

C#はWindowsアプリやゲームの構築だけでなく、ウェブスクレイピングにも非常に強力です!HtmlAgilityPackSeleniumPuppeteer Sharpなどのライブラリを使用することで、データの抽出、操作の自動化、さらにはCAPTCHAの解決(本当に!)を行うことができます。このチュートリアルでは、https://www.scrapethissite.com/pages/を練習場として使用します。始めましょう!


ステップ1:プロジェクトの設定

まず、新しいC#コンソールアプリを作成します。次に、以下のNuGetパッケージをインストールします。

bash Copy
Install-Package HtmlAgilityPack        # HTMLパース用
Install-Package Selenium.WebDriver     # ブラウザ自動化用
Install-Package PuppeteerSharp         # スクリーンショットと高度なスクレイピング用
Install-Package Capsolver.SDK          # CAPTCHA解決用

例1:基本的なページスクレイピング

https://www.scrapethissite.com/pages/simple/から国データを取得してみましょう。

csharp Copy
using HtmlAgilityPack;
using System.Net;

var url = "https://www.scrapethissite.com/pages/simple/";
var client = new WebClient();
client.Headers.Add("User-Agent", "Mozilla/5.0"); // マナーを守りましょう!
var html = client.DownloadString(url);

var doc = new HtmlDocument();
doc.LoadHtml(html);

var countries = doc.DocumentNode.SelectNodes("//div[@class='country']");
foreach (var country in countries)
{
    var name = country.SelectSingleNode(".//h3").InnerText.Trim();
    var capital = country.SelectSingleNode(".//span[@class='country-capital']").InnerText.Trim();
    Console.WriteLine($"国:{name}、首都:{capital}");
}

すべての国とその首都が出力されます。簡単ですね!


例2:SeleniumによるJavaScriptの処理

一部のページでは実際のブラウザが必要です。AJAXのサンプルページをSeleniumを使用してスクレイピングしてみましょう。

csharp Copy
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;

var options = new ChromeOptions();
options.AddArgument("--headless"); // バックグラウンドで実行
using var driver = new ChromeDriver(options);

driver.Navigate().GoToUrl("https://www.scrapethissite.com/pages/ajax-javascript/");
var dynamicContent = driver.FindElement(By.CssSelector(".ajax-content")).Text;
Console.WriteLine($"AJAXコンテンツ:{dynamicContent}");

例3:CapsolverによるCAPTCHAの解決

CAPTCHAに阻まれていますか?Capsolverを使用してReCaptchaV2を回避しましょう。方法は次のとおりです。

  1. Capsolverにサインアップし、APIキーを取得します。
  2. APIを使用してCAPTCHAを解決します。
csharp Copy
using System;
using System.Net.Http;
using System.Threading.Tasks;
using System.Text;
using System.Text.Json;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using System.Threading;

namespace CapSolverSeleniumExample
{
    class Program
    {
        static async Task Main(string[] args)
        {
            string token = await GetCaptchaToken();
            using var driver = new ChromeDriver();
            driver.Navigate().GoToUrl("https://www.example.com");
            Thread.Sleep(5000);
            driver.ExecuteScript("document.getElementById('g-recaptcha-response').innerHTML = arguments[0];", token);
            var submitButton = driver.FindElement(By.Id("submit-button"));
            submitButton.Click();
            Thread.Sleep(5000);
            driver.Quit();
        }

        static async Task<string> GetCaptchaToken()
        {
            string apiKey = "YOUR_API_KEY";
            string siteKey = "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_kl-";
            string siteUrl = "https://www.example.com";
            using var client = new HttpClient();
            var payload = new
            {
                clientKey = apiKey,
                task = new
                {
                    type = "ReCaptchaV3TaskProxyLess",
                    websiteKey = siteKey,
                    websiteURL = siteUrl,
                    pageAction = "login"
                }
            };
            var requestContent = new StringContent(JsonSerializer.Serialize(payload), Encoding.UTF8, "application/json");
            var createTaskResponse = await client.PostAsync("https://api.capsolver.com/createTask", requestContent);
            var createTaskResponseString = await createTaskResponse.Content.ReadAsStringAsync();
            using var createTaskJsonDoc = JsonDocument.Parse(createTaskResponseString);
            var root = createTaskJsonDoc.RootElement;
            if (!root.TryGetProperty("taskId", out var taskIdElement))
            {
                Console.WriteLine("タスクの作成に失敗しました: " + createTaskResponseString);
                return null;
            }
            int taskId = taskIdElement.GetInt32();
            while (true)
            {
                await Task.Delay(1000);
                var resultPayload = new { clientKey = apiKey, taskId = taskId };
                var resultContent = new StringContent(JsonSerializer.Serialize(resultPayload), Encoding.UTF8, "application/json");
                var getTaskResponse = await client.PostAsync("https://api.capsolver.com/getTaskResult", resultContent);
                var getTaskResponseString = await getTaskResponse.Content.ReadAsStringAsync();
                using var getTaskJsonDoc = JsonDocument.Parse(getTaskResponseString);
                var resultRoot = getTaskJsonDoc.RootElement;
                if (resultRoot.TryGetProperty("status", out var statusElement))
                {
                    string status = statusElement.GetString();
                    if (status == "ready")
                    {
                        if (resultRoot.TryGetProperty("solution", out var solutionElement) && solutionElement.TryGetProperty("gRecaptchaResponse", out var tokenElement))
                        {
                            return tokenElement.GetString();
                        }
                        return null;
                    }
                    if (status == "failed" || resultRoot.TryGetProperty("errorId", out _))
                    {
                        Console.WriteLine("解決に失敗しました!レスポンス: " + getTaskResponseString);
                        return null;
                    }
                }
            }
        }
    }
}

Seleniumとシームレスに連携して、CAPTCHAが多いフォームを自動化します!


例4:Puppeteer Sharpによるスクリーンショットの取得

スクレイピングの視覚的な証拠が必要ですか?スクリーンショットをキャプチャしましょう。

csharp Copy
using PuppeteerSharp;

await new BrowserFetcher().DownloadAsync();
using var browser = await Puppeteer.LaunchAsync(new LaunchOptions { Headless = true });
using var page = await browser.NewPageAsync();

await page.GoToAsync("https://www.scrapethissite.com/pages/javascript/");
await page.ScreenshotAsync("screenshot.png");

ページのデバッグやアーカイブに最適です。


2025年のウェブスクレイピングに関するプロのヒント

  1. robots.txtを尊重する: まずhttps://www.scrapethissite.com/robots.txtを確認しましょう。
  2. レート制限: サーバーに過大な負荷をかけないように、Thread.Sleep(2000)で遅延を追加します。
  3. User-Agentのローテーション: 検出を回避するために、実際のブラウザを模倣します。
  4. エラー処理: ネットワークの問題に備えて、コードをtry-catchブロックで囲みます。

コンプライアンス免責事項: このブログで提供される情報は、情報提供のみを目的としています。CapSolverは、すべての適用される法律および規制の遵守に努めています。CapSolverネットワークの不法、詐欺、または悪用の目的での使用は厳格に禁止され、調査されます。私たちのキャプチャ解決ソリューションは、公共データのクローリング中にキャプチャの問題を解決する際に100%のコンプライアンスを確保しながら、ユーザーエクスペリエンスを向上させます。私たちは、サービスの責任ある使用を奨励します。詳細については、サービス利用規約およびプライバシーポリシーをご覧ください。

もっと見る

クラウドフレア エラー 1006、1007、1008
クラウドフレア エラー 1006、1007、1008 解決の方法 | 修正方法

Cloudflareのエラー1006、1007、または1008に苦しんでいますか?これらのアクセス拒否を解決し、ウェブクローリング体験を向上させる実用的な解決策を学びましょう。

Cloudflare
Logo of CapSolver

Sora Fujimoto

05-Dec-2025

AI-LLM: リスク管理の未来のソリューション 画像認識およびCAPTCHAの解決
AI-LLM: リスクコントロールのための画像認識とCAPTCHA解決の未来のソリューション

LLMsがグラフィカルCAPTCHAの解決をどのように変革するかの詳細な探求:ゼロショット推論とCNNの精度を融合した現代のリスク管理へのアプローチ

web scraping
Logo of CapSolver

Sora Fujimoto

05-Dec-2025

Webスクレイピング中にCAPTCHAを解く方法:ScraplingとCapSolverを使って
ScraplingとCapSolverを用いたウェブスクラッピング時のキャプチャの解き方

Scrapling + CapSolver は、ReCaptcha v2/v3 および Cloudflare Turnstile のバイパスを備えた自動スクリーピングを可能にします。

web scraping
Logo of CapSolver

Sora Fujimoto

05-Dec-2025

SeleniumでUser-Agentを変更する
SeleniumでのUser-Agentの変更 | ステップとベストプラクティス

SeleniumでUser Agentを変更することは、多くのウェブスクレイピングタスクにおいて重要なステップです。これは自動化スクリプトを通常のブラウザのように見せかけるために役立ちます...

The other captcha
Logo of CapSolver

Sora Fujimoto

05-Dec-2025

Cloudflare Turnstileを解決するためには`action`が必要かどうかを識別する方法 – CapSolver拡張機能を使用して
CapSolver拡張機能を使用してCloudflare Turnstileを解決する際に`action`が必要かどうかを確認する方法

クラウドフレア・ターニスティルの効果的なCAPTCHAの解決方法を学びます。Capsolverのツールとテクニックを使用するためのステップバイステップのガイドに従ってください。

Cloudflare
Logo of CapSolver

Nikolai Smirnov

05-Dec-2025

9プロキシ
9Proxyの力の発見: 包括的なレビュー

本記事では、9proxyとは何かおよび彼らが提供するサービスについてご紹介します。

Partners
Logo of CapSolver

Anh Tuan

04-Dec-2025