C#を使用してHTMLをクリーンアップ

html html-agility-pack malformed screen-scraping

質問

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


私はサイトを掻き集めています(正当な利用のため)。サイトのHTMLはOKですが、厄介な問題がいくつかあります。

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

ただし、C#で不正な形式のHTMLを処理する場合に推奨されるツールは、 HTML Agility Pack (HAP)です。さらに、私はいくつかのページだけを分析しましたが、未来のページには私がまだ解決していないパターンが含まれているのではないかと心配しています。 "次の数ページでエラーを見つけて修正する"ビジネス。だから、もしHAPに既に堅実で常に働く解決策があるなら、これは素晴らしいことです。問題は、ここでのいくつかの言及を除いて、オブジェクトごとのAPIヘルプファイルを除いて、このツールの使用方法に関するドキュメントは見つかりませんでした。

だから、私が$を費やして、RegexBuddy(無償評価版なし)で時間を過ごすか、HAPのAPIドキュメントで自分の歯を壊す前に、これを行う簡単な方法はありますか? HAPサンプルが役立つだろう... :-)

受け入れられた回答

私はここから答えを得た:1)あなたがコントロールしていないウェブサイトを掻き集めるなら、あなたはいつもあなたが掻き回しているページのレイアウトが変わるたびにスクレーパーを修正しなければならないメンテナンスモードに入るだろう。 2)あなたがこの既知のサイトに限定されている場合は、問題を調整するためにスクレーパを書いてみませんか

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

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

お役に立てれば!

アビ


人気のある回答

どのような厄介な問題があるのか​​教えていただけますか?
しかし、あなたは正規表現を使ってHTMLを整理する必要はありません.HAPはXpath Queriesを使って不正なHTMLの要素にアクセスできるようにします。
基本的には、必要なhtml要素を取得する方法を知るためにXpathを学ぶ必要があります。
それは本当にあなたがHAPを使って解析しているHTMLの種類に依存します。
要素を取得するにはいくつかの方法があります。
idやclassのようにすることも、 "name:"のような指定されたテキストを含む別の要素に続く要素を取得することさえできます。
あなたは良いxpathチュートリアルのためのW3の学校Xpathチュートリアルに行くことができます



ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ