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

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

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

Re[6]: ウェブサイトから取得したHtmlソースの欠損


(過去ログ 132 を表示中)

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

■78280 / inTopicNo.1)  ウェブサイトから取得したHtmlソースの欠損表示について
  
□投稿者/ くなーら (22回)-(2016/01/03(Sun) 15:15:53)

分類:[C#] 

いつもお世話になっております。

環境はVisualStudio2015CommunityのC#です。

ウェブサイトから取得したHtmlソースを見る時、
方法によって内容が略されていることがあります。
(何故そのような差が出るのかを、お伺いしたいと思います)

私がソースを確認する際に使用する(した)手段は以下の通りです。
1.Console.WriteLineで、出力ウィンドウに表示する
2.テキストビジュアライザーで、デバッグ時に
Htmlソースが入った文字列型インスタンスにカーソルを当てて表示する
3.テキストコントロールにHtmlソースを入れる
4.3の手段を実行後にConsole.WriteLineでテキストコントロールの
中身を表示

これらの内、2及び3の手段でHtmlソースが略されていました。
具体的に言うと、コンテンツ部分が丸ごと無くなっていました。

パリティビットのような、コンテンツ部分の表示を司る情報か何かがあったりして、
それでこの辺を制御したりしているのでしょうか?
全てのHtmlソースを取得出来ていることは、4で確実だと思いますので......

何故このような差が出るのかご存知の方がいらっしゃいましたら、
ご教授のほど、お願いします。

/*

お気付きの通り、スクレイピングの勉強をしております。
なぜC#かというと、知恵熱が出たからでして。
http://bbs.wankuma.com/index.cgi?mode=al2&namber=78257
相性があるんでしょうきっと......

*/

引用返信 編集キー/
■78281 / inTopicNo.2)  Re[1]: ウェブサイトから取得したHtmlソースの欠損表示について
□投稿者/ WebSurfer (761回)-(2016/01/03(Sun) 17:52:08)
No78280 (くなーら さん) に返信

何を作っているのか(Windows Forms? WPF? Console アプリ? Web アプリ?
その他?)、それで何をしようとしているのか、あなたの開発環境(VS のバ
ージョンと使用言語だけでは情報として不足)は何かを書いてください。

その際、ついでに手段 1 〜 4 をもっと具体的に、どのサイトにどのように
要求をかけて応答を取得してそれの何を「出力ウィンドウ」に表示したか、
「テキストビジュアライザー」とは何か、「テキストコントロール」とは何
か、「Htmlソースを入れる」とはどういうことかを書いていただけるとより
分かり易くなると思います。
引用返信 編集キー/
■78282 / inTopicNo.3)  Re[2]: ウェブサイトから取得したHtmlソースの欠損表示について
□投稿者/ くなーら (23回)-(2016/01/03(Sun) 20:17:15)
返信ありがとうございます。

> 何を作っているのか
○現在はWPFで作成しています。
ただし、これはプロジェクト作成時にテストであること以外、
特に何も考えていなかっただけで、WPFであることの理由はありません。
将来はタスクスケジューラから毎朝に実行される、Consoleアプリにしようとは思っています。

>それで何をしようとしているのか、
○お気に入りサイトのコンテンツの見出しをエディターに出力しようと思っています。

>あなたの開発環境
○下記になります。
・OS:Windows7 64bit
・IDE:VisualStudio2015Community
・言語:C#
・アプリケーション対象フレームワーク:.NetFlamework 4.5.2
・PCにインストールされてる最新の.NetFlamework:4.6.1
・構成:アクティブ(Debug)
・プラットフォーム:アクティブ(Any CPU)

> その際、ついでに手段 1 〜 4 をもっと具体的に、
>どのサイトに
○質問の原因となったのは、下記サイトになります。
http://www.hatena.ne.jp/

>どのように
○下記ソースのように、WebRequestを使っています
	
	//wPathとは、上記WebSiteのhttp://www.hatena.ne.jp/
	var req = (HttpWebRequest)WebRequest.Create(wPath);

	//警告があるかもしれないので?UserAgentに文通先設定(マナーらしい
        //迷惑投稿者判定避けのため省略したり和風にしたり
	req.UserAgent = @" 文通先 XXX@
	                   名前 XXXX";
	
	//おまじない。後で調べる
	req.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8";
        //クッキー設定で確実に取得?
	CookieContainer cc = new CookieContainer();
	req.CookieContainer = new CookieContainer();
	req.CookieContainer.Add(cc.GetCookies(req.RequestUri));
	

	//Htmlの取得とストリーム用意
	using (var res = (HttpWebResponse)req.GetResponse())
	using (var resSt = res.GetResponseStream())
	using (var sr = new StreamReader(resSt, Encoding.UTF8))
	{	
	    //検証用に出力
	    string source = sr.ReadToEnd();
	  this.txtHeadleine.Text = source;
	    Console.WriteLine(sr.ReadToEnd());//@
	    Console.WriteLine(this.txtHeadleine.Text);//C
	}
	
	〜以下正規表現で見やすく加工したり〜


> 要求をかけて応答を取得してそれの何を「出力ウィンドウ」に表示したか、
○下記キャプチャのように、IDEの「表示」タブから
表示の切り替えが出来るウィンドウ「出力」です。
https://gyazo.com/9c4a98c4195d3c1a14a713d47aa1b32e

> 「テキストビジュアライザー」とは何か、
○下記キャプチャのように、デバッグ時に値を見る時に使用されるウィンドウ?です。
https://gyazo.com/f718d2698f194796d5c01bddff5b3ac4

>「テキストコントロール」とは何
○下記キャプチャのように、WPF上に設置したコントロールのテキストボックスです。
https://gyazo.com/b266d2a2f6455a37e468d9fcff1341b6

>「Htmlソースを入れる」とはどういうことか
○PF上に設置したコントロールのテキストボックスのプロパティ「text」に、
Htmlソースという文字列データを格納することです。

>手段 1 〜 4 をもっと具体的に
1.上記ソースの@にあたります。
Console.WriteLine(sr.ReadToEnd());

2.下記キャプチャのように確認しました。
https://gyazo.com/a291a3223eda536e9acafbfaffedda7e

3.下記キャプチャのように確認しました。
https://gyazo.com/ac9894a44dea0f8e676d07daaaad3eac

4.上記ソースのCにあたります。
Console.WriteLine(this.txtHeadleine.Text);//C


まとめますと、本質問は、
https://gyazo.com/ac9894a44dea0f8e676d07daaaad3eac
このような画面上のコントロールに出力された結果や、
文字列型インスタンスの中身をテキストビジュアライザーで直に見に行った結果が、
https://gyazo.com/9c4a98c4195d3c1a14a713d47aa1b32e
上記キャプチャの出力ウィンドウに表示する結果と何故か異なるので、
その理由が知りたい、というものです。

他に不明条件等ありましたら、仰って下さい。
長文失礼しました。

/*
バッチ組め!と言われそうな目的ですね......
*/

引用返信 編集キー/
■78283 / inTopicNo.4)  Re[3]: ウェブサイトから取得したHtmlソースの欠損表示について
□投稿者/ WebSurfer (762回)-(2016/01/03(Sun) 23:46:39)
No78282 (くなーら さん) に返信

すみません。自分の実力不足でちょっと対応できそうもありません。
他の方の回答をお待ちいただくようお願いします。
引用返信 編集キー/
■78284 / inTopicNo.5)  Re[1]: ウェブサイトから取得したHtmlソースの欠損
□投稿者/ Azulean (567回)-(2016/01/04(Mon) 01:04:40)
2016/01/04(Mon) 01:24:54 編集(投稿者)
2016/01/04(Mon) 01:20:39 編集(投稿者)
2016/01/04(Mon) 01:19:40 編集(投稿者)

No78280 (くなーら さん) に返信
> 1.Console.WriteLineで、出力ウィンドウに表示する
> 4.3の手段を実行後にConsole.WriteLineでテキストコントロールの
> 中身を表示

これらは正常なんですよね?

> 2.テキストビジュアライザーで、デバッグ時に
> Htmlソースが入った文字列型インスタンスにカーソルを当てて表示する
> 3.テキストコントロールにHtmlソースを入れる

これらが途中で切れるってことですよね?


(以下、間違ってるかも)
なお、http://www.hatena.ne.jp/ を手元の Win8.1+IE11 の開発者ツールで見ると、text/html で 57.52KB のサイズがあるそうです。
「文字列が長すぎる」というのが要因?
(ここまで)

(追加)
どちらかといえば、改行コードの認識の違いで、改行される方と改行されない方があるようにも見えますが…、そういうことではない?
ある表示では 490 行、別の表示では 1060 行 と違いました。

</html> まで見えていますか?
見えている上で、中身が違う(途中が欠けている)という問題でしょうか?


なお、source をその場しのぎのコードで以下のようにしたら、行数は一致しました。

// \r\nに統一するために一旦\rに統一してから、\r\nに置き換える。
souce = source.Replace("\r\n", "\r").Replace("\n", "\r").Replace("\r", "\r\n");

引用返信 編集キー/
■78285 / inTopicNo.6)  Re[2]: ウェブサイトから取得したHtmlソースの欠損
□投稿者/ くなーら (24回)-(2016/01/04(Mon) 06:26:12)
返信ありがとうございます。おはようございます。
簡単に報告だけ。後ほどフォロー致します。

3.テキストコントロールにHtmlソースを入れる
この部分について、切れていると申し上げましたが誤りでした。
省略されずに出力されていることを確認しました。
不正確な情報で申し訳ございません。

一方で、
> 2.テキストビジュアライザーで、デバッグ時に
> Htmlソースが入った文字列型インスタンスにカーソルを当てて表示する

この部分について、紹介頂いた改行コードの変換を行っても、いまだ略されていることを確認しました。

まだ詳しく調べてませんが、テキストビジュアライザーそのものの仕様?ではないかと思われました。
原因はAzuleanさんが仰るように、「文字列が長すぎる」ことかと思われます。

本日中にもう一度調査及び報告したいと思います。
解決済み
引用返信 編集キー/
■78286 / inTopicNo.7)  Re[3]: ウェブサイトから取得したHtmlソースの欠損
□投稿者/ Azulean (568回)-(2016/01/04(Mon) 09:49:22)
No78285 (くなーら さん) に返信
> まだ詳しく調べてませんが、テキストビジュアライザーそのものの仕様?ではないかと思われました。
> 原因はAzuleanさんが仰るように、「文字列が長すぎる」ことかと思われます。

手元環境では、</html> まで表示されているようですが、「略されている」のですか?
見た目が違うという話であれば、「右端で折り返す」が要因になりそうですが…、そういった単純な話ではないのですよね?

source の Length プロパティはどのくらいですか?
手元では 98455 でも表示されていました。
引用返信 編集キー/
■78290 / inTopicNo.8)  Re[4]: ウェブサイトから取得したHtmlソースの欠損
□投稿者/ くなーら (25回)-(2016/01/04(Mon) 20:42:38)
遅れまして申し訳ありません。

> 手元環境では、</html> まで表示されているようですが、「略されている」のですか?
> 見た目が違うという話であれば、「右端で折り返す」が要因になりそうですが…、そういった単純な話ではないのですよね?

はい。略されています。
</html>タグが出力されており、間のコンテンツ部分が抜け落ちております。

> source の Length プロパティはどのくらいですか?
> 手元では 98455 でも表示されていました。

Re[2]:本文中のソースを改めて出力テストを行いましたので、ご報告します。

using (var res = (HttpWebResponse)req.GetResponse())
using (var resSt = res.GetResponseStream())
using (var sr = new StreamReader(resSt, Encoding.UTF8))
{
//検証用に出力
string source = sr.ReadToEnd();
  this.txtHeadleine.Text = source;
Console.WriteLine(sr.ReadToEnd());//@
Console.WriteLine(this.txtHeadleine.Text);//C
}
から、「//検証用に出力」コメント以下を下記に書き換え。

source = sr.ReadToEnd();
this.txtHeadleine.Text = source;
Console.WriteLine(sr.ReadToEnd()+"@");
Console.WriteLine(source + "A");
Console.WriteLine(source.Length + "B");
Console.WriteLine(this.txtHeadleine.Text.Length + "C");
source = source.Replace("\r\n", "\r").Replace("\n", "\r").Replace("\r", "\r\n");
Console.WriteLine(source.Length + "D");

結果は下のキャプチャです。
https://gyazo.com/aab3dc9942996004c2f6b4093db77919
@はただ"@"のみが出力され、Aは欠損無く全てのHtmlソースが出力されました。

なおテキストビジュアライザーで表示時は、492行31786文字となりました。下キャプチャにチェッカーの結果。
https://gyazo.com/094ec0498cfe5cc987eb940d68001b42

下記キャプチャは、テキストビジュアライザーで表示されたHtmlソースと、
出力ウィンドウに表示されたHtmlソースを比較した結果です。
https://gyazo.com/3b690241a4bd37a9849866203b7fd238
https://gyazo.com/791902ae9248b127b0c020cbe5a14f83

JavaScriptのロジックが途中で堂々ぶつ切りになっているので、
コンテンツタグだけ消すといった器用なことはしていないみたいですね......

/*
関係無いかと思われますが、Htmlビジュアライザーでは同様の問題は起きないみたいです。
初期表示時は一部のみ表示されますが、↓
https://gyazo.com/a7fb8c1d5518c787fbf7ff850d951662
少し時間が経つと全コンテンツが表示される↓
https://gyazo.com/1aa082b8aae7b86ad17e9326ecc570fe
*/

・ビジュアライザーに問題がある
・使用しているビジュアライザーのみ問題がある
・ウェブアイトに問題がある
・取得の仕方に問題がある
・そういう仕様
ぱっと私が思いつく可能性はこれくらいです。
収拾がつかなさそうなので、ここで解決済みとさせて頂きますが、今後も調査をする次第ではあります。
(とはいっても、他のポータルサイト等を引っ張って出方を見るとか、
ぶつ切りになる境界値を調べるくらいしかとっかかりがありませんが......)

お知恵を貸して頂き、ありがとうございました。
解決済み
引用返信 編集キー/
■78291 / inTopicNo.9)  Re[5]: ウェブサイトから取得したHtmlソースの欠損
□投稿者/ Azulean (569回)-(2016/01/04(Mon) 21:55:46)
失礼しました。
私も同様に途中省略の事象を確認できました。

海外のあるスレッドでは 32768 文字以内になるように略されているというコメントもありました。
http://stackoverflow.com/questions/5394761/why-strings-are-shown-partially-in-the-visual-studio-2008-debugger
解決済み
引用返信 編集キー/
■78292 / inTopicNo.10)  Re[6]: ウェブサイトから取得したHtmlソースの欠損
□投稿者/ くなーら (26回)-(2016/01/04(Mon) 22:43:30)
No78291 (Azulean さん) に返信
> 失礼しました。
> 私も同様に途中省略の事象を確認できました。
>
> 海外のあるスレッドでは 32768 文字以内になるように略されているというコメントもありました。
> http://stackoverflow.com/questions/5394761/why-strings-are-shown-partially-in-the-visual-studio-2008-debugger

わぁー ありがとうございます!
私の環境がおかしいわけではないようでほっと?しました。
お手数おかけしました。
//なぜshort型......
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -