C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: HTMLからXHTMLへの変換について


(過去ログ 70 を表示中)

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■40934 / inTopicNo.1)  HTMLからXHTMLへの変換について
  
□投稿者/ きのこさん (1回)-(2009/09/07(Mon) 18:03:51)

分類:[C#] 

はじめまして。

C#(.NET Framework 2.0)WebスクレイピングのためにHTMLをXHTMLに変換したいと思っています。
ある程度調査してみたところ、
http://msdn.microsoft.com/ja-jp/library/cc326038.aspx
にあるようにInfoPathSDKのツールを使うことで対応できることがわかりました。
ところが、実際に変換を行おうとすると正しく変換がされません。
convertToXHTMLExメソッドを使用して変換が成功したか確かめましたが、
成功していません。
テストに使用したサイトはグーグルのトップページです。

しかし、
<html>
<body>
てすと
</body>
</html>
これくらいの単純なものでしたら、あっさりと変換されます。

これはこの変換ツールが変換するHTMLのコードを選ぶということなのでしょうか?
また、もし他に良いツール等がございましたら、教えていただけると助かります。

Tidyというツールを使ってみることも考えたのですが、.NET向けのサンプルコードが全く見つからないのと、
解説が英語しかないために断念しております。

よろしければご教授ください。
よろしくお願いいたします。
引用返信 編集キー/
■40936 / inTopicNo.2)  Re[1]: HTMLからXHTMLへの変換について
□投稿者/ ぽぴ王子 (453回)-(2009/09/07(Mon) 18:29:29)
ぽぴ王子 さんの Web サイト
No40934 (きのこさん さん) に返信

直接的な回答でないかもしれません。だとしたら申し訳ない。

> テストに使用したサイトはグーグルのトップページです。

グーグルのトップページというと http://www.google.co.jp/ でしょうか。
ちょっと見てみましたが、文法的にはかなり酷い、というかトリッキーな感じの
HTML になっているのだと思います>グーグルのトップページ
なので、XHTML へ変換するのはちょっとやそっとではいかないと思います。

> しかし、
> <html>
> <body>
> てすと
> </body>
> </html>
> これくらいの単純なものでしたら、あっさりと変換されます。
>
> これはこの変換ツールが変換するHTMLのコードを選ぶということなのでしょうか?

この変換ツール( InfoPathSDK のツールということですよね?)もおそらく完璧
ではないでしょうし、むしろ変換できない HTML の方が多いかもしれません。

Web スクレイピングは対象となるサイトが返す HTML に依存するので、サイト側が
まっとうに XHTML に変換できる素直な HTML を必ず返すとは限りません。
現在は技術も進化しているようですが、本来スクレイピング処理は「泥臭い」もの
だと私は考えています。

> また、もし他に良いツール等がございましたら、教えていただけると助かります。
>
> Tidyというツールを使ってみることも考えたのですが、.NET向けのサンプルコードが全く見つからないのと、
> 解説が英語しかないために断念しております。

Tidy と言えば、以前ちょっと調べたことがあった気がするなぁ…と思って検索して
みましたが、これではダメでしょうか。
http://www.w3.org/People/asada/tidy/
コマンドラインで動くようですし、そんなに難しくないように思えます。
単に変換でなくプログラムで操作したいというのであれば .NET 用に TidyLib という
ものもあるようなので、そこを調べてみるといいでしょう。
ただ、日本語の解説はあまり期待してはいけないようです。
そもそも解説が英語しかないので断念するようであれば、断念しておけばいいと思います。
ざっと見た限りはそんな難しい英語というわけでもなさそうですし、辞書を片手に
調べるぐらいはできますよね。そこで技術的な壁にぶち当たったら質問すれば
いいことです。

がんばってください。
引用返信 編集キー/
■40941 / inTopicNo.3)  Re[2]: HTMLからXHTMLへの変換について
□投稿者/ なぎせゆうき (3回)-(2009/09/07(Mon) 20:54:44)
HTMLは曖昧で誤りを含むコードをそれなりに許してしまいますし、ブラウザはそれをどうにか解釈して表示しようとしますし、そうしたHTMLを書いた人はブラウザ上でどうにか表示されているから過ちに気付かずに放置します。だから、そうした誤ったHTMLがWeb上にはたくさんあります。

こうしたHTMLは本質的にうまくXHTMLに変換できません。HTMLが一意に解釈できない場合があります。

例えば
<b>a<i>b</b>c</i>
といったように入れ子が正しくないケースがあったとします。これはもちろんHTML的には誤りですが、ブラウザはエラーなど出さずにレンダリングしてしまいます。つまり書いた人は気づいていなくてこうした誤ったHTMLを配信していることがあります。
このようなHTMLをXHTMLに変換するとしたらどのように変換するべきでしょうか?
<b>a</b>b<i>c</i>
<b>ab</b><i>c</i>
<b>a</b><i>bc</i>
といったいずれかの誤りではないかと推測されますが、明確にコレ!と決定づけることができません。

こうした場合、よくわからないけど決め打ちでとにかく変換してしまえ!という方針のライブラリなのであれば、とりあえずXHTMLに変換できることでしょう。それがあなたが望んだ結果と一致する保証はまったくありませんが :-P

普通はこうした異常なケースに遭遇したらエラーを出すように設計するのではないでしょうか。
そのエラーになる部分をどうするか。これはとても難しいテーマだということが想像付きますよね?
HTML->XHTML変換は人間でも推測できないケースがあります。
ぽぴ王子の答えにある「泥臭い」部分と言うのはまさにこのあたりのことです。
本質的には無理なケースを含むものの、だましだまし、どうにか実用範囲にもっていくという世界です。
引用返信 編集キー/
■40945 / inTopicNo.4)  Re[1]: HTMLからXHTMLへの変換について
□投稿者/ やじゅ (1315回)-(2009/09/07(Mon) 21:46:08)
やじゅ さんの Web サイト
No40934 (きのこさん さん) に返信
> Tidyというツールを使ってみることも考えたのですが、.NET向けのサンプルコードが全く見つからないのと、
> 解説が英語しかないために断念しております。

NTidyは、HTML Tidyの.NET版 詳しく見るには英語なのは変わらないけど・・・
http://www.atmarkit.co.jp/fdotnet/dotnettips/760ntidy/ntidy.html
引用返信 編集キー/
■40950 / inTopicNo.5)  Re[2]: HTMLからXHTMLへの変換について
□投稿者/ きのこさん (2回)-(2009/09/07(Mon) 22:11:08)
みなさんご返信ありがとうございます。

ぽぴ王子さま
なぎせゆうきさま

XHTML変換に絶対はないと思ったほうが良いのですね。
試行錯誤しながら妥協できるレベルまで行かなければ、
従来通り正規表現を用いてスクレイピングするしかないと
思ってがんばってみようと思います。
ありがとうございました。

やじゅさま

さっそくチェックさせていただきました。
この解説ページは見つけられていなかったので、助かりました。
試してみようと思います。
ありがとうございました。
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -