1

C# を使用して不正な形式の HTML を修復するにはどうすればよいですか? 素晴らしい答えは、HTML Agility Pack のサンプルです!


サイトをスクレイピングしています (正当な使用のため)。サイトの HTML は問題ありませんが、厄介な問題がいくつかあります。

私が行くことができる1つの方法は、正規表現を使用することです。Expression Web を使用して問題を分析し、それらを修正するために必要な正規表現を使用しました。1 つの方法は、RegexBuddyなどのツールを使用して、これらの正規表現の C# コードを生成することです。

ただし、C# で不正な形式の HTML を処理するための推奨ツールは、HTML Agility Pack (HAP) です。さらに、私はほんの一握りのページしか分析していませんが、将来のページにはまだ解決していないパターンが含まれているのではないかと心配しており、「次の数ページでエラーを見つけて修正する」メンテナンスに入るのは嫌です仕事。したがって、HAP が安定した、常に機能するソリューションを既に持っている場合、これは素晴らしいことです。問題は、SO でのいくつかの言及を除いて、オブジェクトごとの API ヘルプ ファイルを除いて、このツールの使用方法に関するドキュメントを見つけることができなかったことです。

では、RegexBuddy (無料の評価版はありません) にお金と時間を費やす前に、または HAP の API ドキュメントで歯を磨く前に、これを行う簡単な方法はありますか? HAP サンプルが役立ちます... :-)

4

5 に答える 5

2

ここでの回答から得たもの:1)自分が管理していないウェブサイトをスクレイピングしている場合は、常にメンテナンスモードに入り、スクレイピングしているページのレイアウトが変更されるたびにスクレイパーを修正する必要があります。2)この既知のサイトに限定されている場合は、問題を調整するためにスクレーパーを作成してみませんか

したがって、メンテナンスモードに移行する必要がある場合は、可能な限り簡単にする必要があります。したがって、私のプロセスは次のとおりです。

  1. WebiusのSWExplorerAutomationを使用して、Webページのシーンを検出します。シーンは、IE用に定義した条件のコレクションであるという考え方です。Webページがロードされると、IEはどの条件のセットが満たされているかを確認しようとします(たとえば、ページタイトルは「アカウントログイン」、ページには「ログイン」テキストボックスと「パスワード」テキストボックスが含まれます)。シーンに対応する一連の条件が検出された場合、IEはシーンが検出されたことを報告します。このモデルは抽象化レイヤーを提供します-Webページの一部の変更は、シーンファイルの変更に変換できるため、コードを変更する必要がなくなります。さらに、これはIEのイベント駆動型モデルから私を保護します。私は「シーン」と呼んでいます。この製品を評価していますが、主にドキュメントがひどいため、使用するかどうかはまだわかりません。、そして私がまだSWEAを購入していないもう一つの理由は、この記事がその作者をWatinに対するスパムであると非難していることです。
  2. Webページを取得したら、Expression Webを使用して互換性チェックを実行し、エラーを特定します。
  3. RegexMagicを使用して、エラーを削除して修正します。私はこのツールが大好きです。確かに、それは本当に簡単なはずのことをすることができないので、時にはそれはあなたを殺人的に怒らせることがありますが、それは甘くて甘いツールであり、ドキュメントは素晴らしいです。
  4. 最後に、私が知っているすべてのエラーが修正された後、HTML Agility Packを使用してXHTMLに変換します。つまり、すべて小文字、属性間の引用符など、tsを交差させてドットを付けます。

お役に立てれば!

Avi

于 2009-12-26T22:43:45.017 に答える
2

どのような厄介な問題があるか教えていただけますか?
しかし、正規表現を使用して html をきれいにする必要はありません。HAP では、Xpath クエリを使用して不正な形式の html の要素にアクセスできます。
基本的に、必要な html 要素を取得する方法を知るには、Xpath を学ぶ必要があります。
これは、HAP を使用して解析している html の種類に大きく依存します。
しかし、要素を取得する方法はいくつかあります。
id や class のように、または「name:」などの特定のテキストを含む別の要素に続く要素を取得することもできます。 素敵な xpath チュートリアルについては、W3 スクールの Xpath チュートリアル
にアクセスしてください。

于 2009-11-23T14:26:41.123 に答える
1

管理していない Web サイトをスクレイピングしている場合、スクレイピングしているページのレイアウトが変更されるたびにスクレイパーを修正する必要があるメンテナンス モードに常に入ることになります。正規表現 <td color="red">\d+</td> を使用してページから大きな赤い数字を取得しているか、DOM パーサーを使用して 3 番目のセルを取得しているかは関係ありません。同じものを取得するための ID 番号を持つテーブルの 2 行目。Web マスターが color 属性を class 属性に置き換えると、正規表現が壊れます。Web マスターがテーブルの上部に別の行を追加すると、DOM パーサーが壊れます。

Web ページの大部分をスクレイピングしていて、それらを自分の Web ページに埋め込みたい場合は、Web 標準への準拠に対する欲求を乗り越えて、ブラウザーに物事の表示方法を理解させる方が簡単かもしれません。

于 2009-11-23T14:09:53.900 に答える
1

Html Agility Pack を使用していて、発生する問題を知っているので、この既知のサイトに限定されている場合は、HtmlDocument をロードしたときに問題を調整するためにスクレイパーを作成してみませんか。

つまり、要素が常に の後に表示されることがわかっている場合は、その要素をタグの最初の子位置に挿入します.....

于 2009-11-23T14:13:19.277 に答える
1

正規表現は HTML クリーニングには使用できません。http://tidy.sourceforge.net/は役立ちますか?

于 2009-11-18T08:51:35.807 に答える