質問

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


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

方法の 1 つは正規表現を使用することです。Expression Web を使用して、問題とその修正に必要な正規表現を分析しました。したがって、1 つの方法は、次のようなツールを使用することです。 正規表現バディ これらの正規表現の C# コードを生成します。

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

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

役に立ちましたか?

解決 2

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

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

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

お役に立てれば!

アヴィ

他のヒント

あなたは迷惑な問題の種類を持っている私に言うことができますか?
しかし、あなたはいけない、HAPは、あなたがXPathクエリを使用して不正なHTMLのelemtentsにアクセスできるようになるHTMLをきれいにするために正規表現を使用する必要があります。
そして基本的にあなたがしたいHTML要素を取得する方法を知っているために、XPathを学ぶ必要があります。
それは本当にあなたがHAPを使用して解析しているHTMLの種類に依存します。
しかし要素を取得するには、いくつかの方法があります。
でも、IDまたはクラスかによってようにあなたは、「名前:」のように指定されたテキスト含まれている別の要素は以下の要素を取得することができます。たとえば
することができます後藤 W3学校

あなたがコントロールしていないウェブサイトをスクレイピングしている場合は、

、あなたは常にあなたが変更をこするしているページのレイアウトあなたのスクレーパーを毎回修正する必要があり、メンテナンスモードに入ります。あなたがページから大きな赤い番号を取得するには、\ D + 正規表現使用している場合や、中に第三のセルを取得するには、DOMパーサを使用している場合、それは問題ではありません。 ID番号を持つテーブル内の2行目は、同じを取得します。ウェブマスターは、クラス属性と色の属性を置き換える場合正規表現休憩。ウェブマスターがテーブルの上に別の行を追加する場合はDOMパーサが壊れています。

あなたがウェブページの大部分をこすると、独自のWebページでそれらを埋め込みたい場合は、Web標準への準拠のためのあなたの欲求を介して取得し、物事を表示する方法をブラウザの数字を出すことが容易かもしれません。

は、HTML敏捷性パックを使用して、あなたはあなたがHTMLDocumentのをロードしたときに問題を調整するために、あなたのスクレーパーを記述しない理由は、この知られているサイトに限定されている場合、発生する問題を知っているので。

すなわち: あなたは要素が常に表示された後に知っていれば、タグの最初の子の位置に要素を挿入.....

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top