IronWebScraper チュートリアル C#でのウェブスクレイピングブログ C#でブログをスクレイピングする方法 カーティス・チャウ 更新日:6月 10, 2025 IronWebScraper をダウンロード NuGet ダウンロード DLL ダウンロード 無料トライアル LLM向けのコピー LLM向けのコピー LLM 用の Markdown としてページをコピーする ChatGPTで開く このページについてChatGPTに質問する ジェミニで開く このページについてGeminiに問い合わせる ジェミニで開く このページについてGeminiに問い合わせる 困惑の中で開く このページについてPerplexityに問い合わせる 共有する Facebook で共有 Xでシェア(Twitter) LinkedIn で共有 URLをコピー 記事をメールで送る This article was translated from English: Does it need improvement? Translated View the article in English Iron WebScraperを使用して、C#またはVB.NETを使用してブログのコンテンツを抽出しましょう。 このチュートリアルでは、WordPressブログ(または類似のもの)が.NETを使用してコンテンツに戻す方法を示します。 // Define a class that extends WebScraper from IronWebScraper public class BlogScraper : WebScraper { /// <summary> /// Override this method to initialize your web-scraper. /// Set at least one start URL and configure domain or URL patterns. /// </summary> public override void Init() { // Set your license key for IronWebScraper License.LicenseKey = "YourLicenseKey"; // Enable logging for all actions this.LoggingLevel = WebScraper.LogLevel.All; // Set a directory to store output and cache files this.WorkingDirectory = AppSetting.GetAppRoot() + @"\BlogSample\Output\"; // Enable caching with a specific duration EnableWebCache(new TimeSpan(1, 30, 30)); // Request the start URL and specify the response handler this.Request("http://blogSite.com/", Parse); } } // Define a class that extends WebScraper from IronWebScraper public class BlogScraper : WebScraper { /// <summary> /// Override this method to initialize your web-scraper. /// Set at least one start URL and configure domain or URL patterns. /// </summary> public override void Init() { // Set your license key for IronWebScraper License.LicenseKey = "YourLicenseKey"; // Enable logging for all actions this.LoggingLevel = WebScraper.LogLevel.All; // Set a directory to store output and cache files this.WorkingDirectory = AppSetting.GetAppRoot() + @"\BlogSample\Output\"; // Enable caching with a specific duration EnableWebCache(new TimeSpan(1, 30, 30)); // Request the start URL and specify the response handler this.Request("http://blogSite.com/", Parse); } } ' Define a class that extends WebScraper from IronWebScraper Public Class BlogScraper Inherits WebScraper ''' <summary> ''' Override this method to initialize your web-scraper. ''' Set at least one start URL and configure domain or URL patterns. ''' </summary> Public Overrides Sub Init() ' Set your license key for IronWebScraper License.LicenseKey = "YourLicenseKey" ' Enable logging for all actions Me.LoggingLevel = WebScraper.LogLevel.All ' Set a directory to store output and cache files Me.WorkingDirectory = AppSetting.GetAppRoot() & "\BlogSample\Output\" ' Enable caching with a specific duration EnableWebCache(New TimeSpan(1, 30, 30)) ' Request the start URL and specify the response handler Me.Request("http://blogSite.com/", Parse) End Sub End Class $vbLabelText $csharpLabel いつものように、Scraperを作成し、WebScraperクラスを継承します。 この場合、それは"BlogScraper"です。 作業ディレクトリを"\BlogSample\Output\"に設定し、すべての出力とキャッシュファイルをそこに保存できるようにします。 次に、リクエストされたページをキャッシュフォルダ"WebCache"に保存するためにWebキャッシュを有効にします。 さあ、パース関数を書きましょう: /// <summary> /// Override this method to handle the Http Response for your web scraper. /// Add additional methods if you handle multiple page types. /// </summary> /// <param name="response">The HTTP Response object to parse.</param> public override void Parse(Response response) { // Iterate over each link found in the section navigation foreach (var link in response.Css("div.section-nav > ul > li > a")) { switch(link.TextContentClean) { case "Reviews": { // Handle reviews case } break; case "Science": { // Handle science case } break; default: { // Save the link title to a file Scrape(new ScrapedData() { { "Title", link.TextContentClean } }, "BlogScraper.Jsonl"); } break; } } } /// <summary> /// Override this method to handle the Http Response for your web scraper. /// Add additional methods if you handle multiple page types. /// </summary> /// <param name="response">The HTTP Response object to parse.</param> public override void Parse(Response response) { // Iterate over each link found in the section navigation foreach (var link in response.Css("div.section-nav > ul > li > a")) { switch(link.TextContentClean) { case "Reviews": { // Handle reviews case } break; case "Science": { // Handle science case } break; default: { // Save the link title to a file Scrape(new ScrapedData() { { "Title", link.TextContentClean } }, "BlogScraper.Jsonl"); } break; } } } ''' <summary> ''' Override this method to handle the Http Response for your web scraper. ''' Add additional methods if you handle multiple page types. ''' </summary> ''' <param name="response">The HTTP Response object to parse.</param> Public Overrides Sub Parse(ByVal response As Response) ' Iterate over each link found in the section navigation For Each link In response.Css("div.section-nav > ul > li > a") Select Case link.TextContentClean Case "Reviews" ' Handle reviews case Case "Science" ' Handle science case Case Else ' Save the link title to a file Scrape(New ScrapedData() From { { "Title", link.TextContentClean } }, "BlogScraper.Jsonl") End Select Next link End Sub $vbLabelText $csharpLabel Parseメソッドの中で、トップメニューからカテゴリページ(Movies, Science, Reviewsなど)へのすべてのリンクを取得します。 その後、リンクカテゴリに基づいて適切なパースメソッドに切り替えます。 Scienceページのためにオブジェクトモデルを準備しましょう: /// <summary> /// Represents a model for Science Page /// </summary> public class ScienceModel { /// <summary> /// Gets or sets the title. /// </summary> public string Title { get; set; } /// <summary> /// Gets or sets the author. /// </summary> public string Author { get; set; } /// <summary> /// Gets or sets the date. /// </summary> public string Date { get; set; } /// <summary> /// Gets or sets the image. /// </summary> public string Image { get; set; } /// <summary> /// Gets or sets the text. /// </summary> public string Text { get; set; } } /// <summary> /// Represents a model for Science Page /// </summary> public class ScienceModel { /// <summary> /// Gets or sets the title. /// </summary> public string Title { get; set; } /// <summary> /// Gets or sets the author. /// </summary> public string Author { get; set; } /// <summary> /// Gets or sets the date. /// </summary> public string Date { get; set; } /// <summary> /// Gets or sets the image. /// </summary> public string Image { get; set; } /// <summary> /// Gets or sets the text. /// </summary> public string Text { get; set; } } ''' <summary> ''' Represents a model for Science Page ''' </summary> Public Class ScienceModel ''' <summary> ''' Gets or sets the title. ''' </summary> Public Property Title() As String ''' <summary> ''' Gets or sets the author. ''' </summary> Public Property Author() As String ''' <summary> ''' Gets or sets the date. ''' </summary> Public Property [Date]() As String ''' <summary> ''' Gets or sets the image. ''' </summary> Public Property Image() As String ''' <summary> ''' Gets or sets the text. ''' </summary> Public Property Text() As String End Class $vbLabelText $csharpLabel 次は、単一ページのスクレイピングを実装しましょう: /// <summary> /// Parses the reviews from the response. /// </summary> /// <param name="response">The HTTP Response object.</param> public void ParseReviews(Response response) { // A list to hold Science models var scienceList = new List<ScienceModel>(); foreach (var postBox in response.Css("section.main > div > div.post-list")) { var item = new ScienceModel { Title = postBox.Css("h1.headline > a")[0].TextContentClean, Author = postBox.Css("div.author > a")[0].TextContentClean, Date = postBox.Css("div.time > a")[0].TextContentClean, Image = postBox.Css("div.image-wrapper.default-state > img")[0].Attributes["src"], Text = postBox.Css("div.summary > p")[0].TextContentClean }; scienceList.Add(item); } // Save the science list to a JSONL file Scrape(scienceList, "BlogScience.Jsonl"); } /// <summary> /// Parses the reviews from the response. /// </summary> /// <param name="response">The HTTP Response object.</param> public void ParseReviews(Response response) { // A list to hold Science models var scienceList = new List<ScienceModel>(); foreach (var postBox in response.Css("section.main > div > div.post-list")) { var item = new ScienceModel { Title = postBox.Css("h1.headline > a")[0].TextContentClean, Author = postBox.Css("div.author > a")[0].TextContentClean, Date = postBox.Css("div.time > a")[0].TextContentClean, Image = postBox.Css("div.image-wrapper.default-state > img")[0].Attributes["src"], Text = postBox.Css("div.summary > p")[0].TextContentClean }; scienceList.Add(item); } // Save the science list to a JSONL file Scrape(scienceList, "BlogScience.Jsonl"); } ''' <summary> ''' Parses the reviews from the response. ''' </summary> ''' <param name="response">The HTTP Response object.</param> Public Sub ParseReviews(ByVal response As Response) ' A list to hold Science models Dim scienceList = New List(Of ScienceModel)() For Each postBox In response.Css("section.main > div > div.post-list") Dim item = New ScienceModel With { .Title = postBox.Css("h1.headline > a")(0).TextContentClean, .Author = postBox.Css("div.author > a")(0).TextContentClean, .Date = postBox.Css("div.time > a")(0).TextContentClean, .Image = postBox.Css("div.image-wrapper.default-state > img")(0).Attributes("src"), .Text = postBox.Css("div.summary > p")(0).TextContentClean } scienceList.Add(item) Next postBox ' Save the science list to a JSONL file Scrape(scienceList, "BlogScience.Jsonl") End Sub $vbLabelText $csharpLabel モデルを作成したら、メイン要素(タイトル、著者、日付、画像、テキスト)にフォーカスするためにレスポンスオブジェクトを解析します。 次に、結果をScrape(object, fileName)を使用して別のファイルに保存します。 IronWebscraperの使用に関する完全なチュートリアルはこちらをクリック IronWebscraperを使い始める よくある質問 C#でブログウェブスクレイパーをどのように作成しますか? C#でブログウェブスクレイパーを作成するには、IronWebScraperライブラリを使用できます。WebScraperクラスを拡張するクラスを定義し、開始URLを設定して、異なるページタイプを処理するスクレイパーを構成し、HTTP応答から必要な情報を抽出するためにParseメソッドを使用します。 ウェブスクレイピングでのParseメソッドの機能は何ですか? IronWebScraperを使用したウェブスクレイピングでは、ParseメソッドがHTTP応答を処理するために重要です。それはページの内容を解析し、リンクを特定し、ブログ投稿や他のセクションのようなページタイプを分類するのに役立ちます。 ウェブスクレイピングデータを効率的に管理するにはどうすればよいですか? IronWebScraperは、要求されたページを保存するためにキャッシュを構成し、出力ファイル用の作業ディレクトリを設定することで効率的なデータ管理を可能にします。この組織はスクレイプしたデータを追跡し、不要なページの再取得を減らします。 IronWebScraperはWordPressブログのスクレイピングにどのように役立ちますか? IronWebScraperは、ブログの構造をナビゲートし、投稿の詳細を抽出し、さまざまなページタイプを処理するツールを提供することで、WordPressブログのスクレイピングを簡素化します。ライブラリを使用して、タイトル、著者、日付、画像、テキストなどの情報を解析できます。 IronWebScraperはC#とVB.NETの両方で使用できますか? はい、IronWebScraperはC#とVB.NETの両方で互換性があり、これらの.NET言語のいずれかを好む開発者にとって汎用性の高い選択です。 ブログ内の異なるタイプのページをどのように扱いますか? IronWebScraperでParseメソッドをオーバーライドすることで、ブログ内の異なる種類のページを処理できます。このアプローチにより、ページをレビューや科学などの異なるセクションに分類し、各セクションに特定の解析ロジックを適用できます。 スクレイプしたブログデータを構造化形式で保存する方法はありますか? はい、IronWebScraperを使用して、スクレイプしたブログデータをJSONLのような構造化形式で保存できます。この形式は、各データを行ごとのJSON形式で保存するのに役立ち、後で管理および処理しやすくします。 ウェブスクレイパーの作業ディレクトリを設定するにはどうすればよいですか? IronWebScraperでは、出力およびキャッシュファイルが保存される場所を指定するためにスクレイパーを構成することで作業ディレクトリを設定できます。これによりスクレイプしたデータを効率的に整理できます。 ウェブスクレイピングで一般的なトラブルシューティングのシナリオは何ですか? ウェブスクレイピングにおける一般的なトラブルシューティングのシナリオには、ウェブサイトの構造の変化への対応、レート制限の管理、アンチスクレイピング対策への対応が含まれます。IronWebScraperを使用すると、これらの問題を診断および解決するためにエラーハンドリングおよびログを実装できます。 IronWebScraperの使用方法を学ぶリソースをどこで見つけることができますか? IronWebScraperの使用に関するリソースとチュートリアルは、Iron Softwareのウェブサイトで見つけることができ、ウェブスクレイピングチュートリアルのセクションで詳細なガイドと例を提供しています。 カーティス・チャウ 今すぐエンジニアリングチームとチャット テクニカルライター Curtis Chauは、カールトン大学でコンピュータサイエンスの学士号を取得し、Node.js、TypeScript、JavaScript、およびReactに精通したフロントエンド開発を専門としています。直感的で美しいユーザーインターフェースを作成することに情熱を持ち、Curtisは現代のフレームワークを用いた開発や、構造の良い視覚的に魅力的なマニュアルの作成を楽しんでいます。開発以外にも、CurtisはIoT(Internet of Things)への強い関心を持ち、ハードウェアとソフトウェアの統合方法を模索しています。余暇には、ゲームをしたりDiscordボットを作成したりして、技術に対する愛情と創造性を組み合わせています。 準備はできましたか? Nuget ダウンロード 125,527 | Version: 2025.11 リリース NuGet 無料版 総ダウンロード数: 125,527 ライセンスを見る