2

私の背景

HTMLスクラブに関しては、私は初心者です。C# で html をコーディングするだけの仕事をしてから約 4 年が経ちました。しばらく前に C# を使用した他のコーディングは、フォームが SQL Server データベースのデータを操作するためのものでした。

HTML Agility Pack (HAP) を使い始めるために私が行ったこと:

HTML Agility Pack の使用を開始する方法について、さまざまなオンライン ソースから見つけた指示を理解するのに数日を費やしました。これまでに見つけたもののいくつかを以下に示します。

  • www.4guysfromrolla.com/articles/011211-1.aspx
  • olussier.net/2010/03/30/easy-parse-html-documents-in-csharp/
  • stackoverflow.com/questions/846994/how-to-use-html-agility-pack
  • shatalov.su/en/articles/web/parser_1.php
  • 以下でさらに言及します...

これまでの私の結果

私は、資料がかなり混乱していて、それぞれの情報源が私に何か違うことを教えているように見えることを発見しました. 私の試みはすべて行き詰まりました。


私の混乱を効率的に整理し、私の特定の状況に答えることができるように、私のプロジェクト、私の環境、私の質問の下の 3 つのセクションで説明します。

私のプロジェクト

私は、html ファイルからデータをスクラブするプロセスの作成を任されています。私はファイルをよく知っています。ファイルは、マシンのローカルのファイル システムに存在します。html ファイルは、私たちが所有していないプロセスによって別の場所に作成され、上記のローカル フォルダーに配置されます。(参考までに、私の質問の一部ではありませんが、スクラブタスクを実行するためにスケジュールに従って実行されるプロジェクトまたはアプリを作成し、収集したデータをデータベーステーブルに入力することを期待しています。)

私の環境

上記のように、処理される html ファイルはローカル マシンに存在します。このプロジェクトのコードを作成するために、このコンピューターに Visual Studio 2010 Professional を新しくインストールしました。HTML Agility Pack は、ファイル共有上のこのマシンにアクセスできるようになりました。

REGEIT の下: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP には、このマシンにインストールされている .NET Framework のバージョンを示す次のリストが表示されます。

  • CDF
  • V2.0.50727
  • V3.0
  • V3.5
  • V4
  • V4.0

私の質問

1.) 一部のサイトから、HTML Agility Pack をダウンロードして「HtmlAgilityPack.dll」ファイルを使用するように言われましたが、zip ファイルには 9 つのフォルダーが含まれており、それぞれにこのファイルの異なるコピーがあります。どれが欲しいですか?

フォルダの名前は次のとおりです。

  • ネット20
  • Net40
  • Net40 クライアント
  • ネット45
  • sl3-wp
  • sl4
  • sl4-windowsphone71
  • sl5
  • winrt45

2.) stackoverflow.com/questions/846994/how-to-use-html-agility-pack のフォーラムの質問「HTML Agility Pack の使用方法」への回答は、質問者に「HTML Agility をダウンロードしてビルドする」ように指示します。このサイトには、nuget.org/packages/HtmlAgilityPack へのリンクがあり、コマンド「PM> Install-Package HtmlAgilityPack」を実行して HTMLAgilityPack を「インストール」するように指示されています。 「パッケージ マネージャー コンソール」</p>

これはどういう意味ですか?他のサイトでは、bin フォルダー内の dll を参照するように言われています。それは私に何をするように言っているのですか?私が始めるために、より詳細に説明してください。

3.) C# を使用している場合、どのようなプロジェクトを作成すればよいですか?

4.) 私のプロジェクトに適用できると思われるその他のリソースがあれば教えてください。

4

1 に答える 1

1

マシンにインストールされている .NET フレームワークのバージョンがあれば、.NET 4.0 プロジェクトを作成できるようです。プロジェクトの種類は、アプリケーションの実行方法によって異なります。個人的には、ロード html とスクラブ コードを含む C# クラス ライブラリ プロジェクトを作成し、実際にファイルを開くために使用する任意のメカニズムでホストすることを選択します。

FileSystem からファイルを開くには、File.OpenReadまたはFile.ReadAllTextfrom を使用しますSystem.IO.File。ストリームまたはファイルの内容をHtmlDocument.Load/LoadHtmlメソッドに渡すことができます。

 HtmlDocument doc = new HtmlDocument();

 // Use File.ReadAllText
 string contents = File.ReadAllText("PathToFileName");
 doc.LoadHtml(contents);

 // Or use a stream
 using (var contents = File.OpenRead("PathToFileName"))
 {
     doc.Load(contents);
 }

ホスティングの可能性は十分にあります。コンソール アプリケーション (コマンド ラインまたはタスク スケジューラを介して起動可能)、Windows サービス (Windows にロード可能、誰もマシンにログオンしていない場合でもバックグラウンドで実行可能、潜在的に を使用FileSystemWatcherしてファイルを自動的に取得可能) 、またはユーザーが処理するファイルを選択して何らかの方法で結果を表示できるようにする Windows フォーム/WPF アプリケーション。

それを使用する方法に関しては、これは Html Agility Pack の主な問題の 1 つです。それを使用する新しい方法が時間の経過とともに追加されたため、実際のライブラリにはいくつかの使用方法があります。昔ながらの XPath クエリ ルート (元の API) を使用することも、Linq-to-HTML/XML ルート (より新しい方法) を使用することもできます。どちらが優れているというわけではなく、どちらにも明確な利点があります。XPath ソリューションを使用すると、クエリをテキスト ファイルに簡単に格納できるため、構成可能なシステムに最適ですが、Linq-To-HTML バージョンは、開発者の観点から見ると少し見やすくなっています。

ダウンロード方法については、ここにもいくつかのオプションがあります。

  • 実際、ソースは CodePlex Web サイト からダウンロードできます。どのように進めるかに関係なく、ライブラリを自分でコンパイルしなくても、ボンネットの下を見て、何かがそのように機能する理由を理解することができます。
  • CodePlex からバイナリをダウンロードしてプロジェクトに保存できます。NuGet などのサービスを作成する前は、これが開発者がライブラリを配布する唯一の簡単な方法でした。
  • 個人的には、NuGet ルートを選択します。Visual Studio 2012 を使用している場合、NuGet は既に Visual Studio に統合されています。Visual Studio 2010 を使用している場合、同じ機能を得るには NuGet 拡張機能をインストールする必要があります。インストールしたら、Visual Studio 内から Nuget パッケージ マネージャー コンソールを開くことができます。Visual Studio ソリューションを開き、新しく作成したクラス ライブラリをソリューション エクスプローラーで選択した状態で、Install-Package HtmlAgilityPackコマンドを入力して、Visual Studio がプロジェクトに適切なバージョンの HTML Agility Pack をダウンロードしてインストールできるようにします。どのライブラリを選択するか心配する必要はありません。Visual Studio が自動的に選択します。

ライブラリを完全にインストールしたので、それをどのように使用するかは、どのタイプの HTML スクラビングを行っているか、および XPath を選択するか、Linq-to-HTML ルートを選択するかによって異なります。しかし、一般的には、HTML ドキュメントをロードすることになります。

 HtmlDocument doc = new HtmlDocument();
 doc.Load(/* path to file or stream */); or doc.LoadHtml(/*string*/);

ファイルをロードし、発生する可能性のある解析エラーをキャッチした後、コンテンツが実際に XML であるかのように、XPath を使用して HTML のクエリに進みます ( MSDN の XML/XPath ドキュメントが実際にここに適用されます)。

 var nodes = doc.DocumentNode.SelectNodes("//table/tr/td");

または、Linq-to-HTML を使用した同じクエリ:

 var nodes = doc.DocumentNode.Descendants("table")
           .Select(table => table.Elements("tr").Select(tr => tr.Elements("td")));

または、Linq クエリ構文で Linq-to-Html を使用します。

var tds = from tables in doc.DocumentNode.Descendants("table")
            from tr in tables.Elements("tr")
            from td in tr.Elements("td")
            select td;

クエリは好きなだけワイルドにすることができます。XPathnavigator構文は、.NET Framework の標準構文 ( SelectNodes/ SelectSingleNode/Childrenなどを使用) または Linq-to-XML 構文 ( .Descendants/ .Ancesters/.Element(s)と標準 Linqを使用)に似ています。

以下も参照してください。

于 2013-01-11T18:11:22.937 に答える