Web からデータを取り出す – プログラミング – Home

Web からデータを取り出す
 
通知
すべてクリア

[解決済] Web からデータを取り出す


はる
 はる
(@はる)
ゲスト
結合: 21年前
投稿: 34
Topic starter  

Officeの機能にあるWeb からデータを取り出す事を
C#で実現したいのですが教えてください
ちなみにOfficeの操作をマクロに記録したものが以下になります

With ActiveSheet.QueryTables.Add(Connection:= _
URL; http://quote.yahoo.co.jp/q?s=1234&d=v1, Destination:=Range(A1))
.Name = q?s=9943&d=v1
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.WebSelectionType = xlSpecifiedTables
.WebFormatting = xlWebFormattingNone
.WebTables = 11
.WebPreFormattedTextToColumns = True
.WebConsecutiveDelimitersAsOne = True
.WebSingleBlockTextImport = False
.WebDisableDateRecognition = False
.WebDisableRedirections = False
.Refresh BackgroundQuery:=False
End With
End Sub


引用未解決
トピックタグ
渋木宏明(ひどり)
 渋木宏明(ひどり)
(@渋木宏明(ひどり))
ゲスト
結合: 22年前
投稿: 196
 

>Officeの機能にあるWeb からデータを取り出す事を
>C#で実現したいのですが教えてください

どんな形式のデータを、どのような状態で取り出したいのでしょう?

ごく単純に、与えられた URL から byte 配列や Stream としてデータを取得するだけな
ら、WebClient クラスでできます。


返信引用
はる
 はる
(@はる)
ゲスト
結合: 21年前
投稿: 34
Topic starter  

>ごく単純に、与えられた URL から byte 配列や Stream としてデータを取得するだけ

>ら、WebClient クラスでできます

ありがとうございます
早速サンプルを探し

byte[] myDatabuffer = myWebClient.DownloadData (uriSuffix);
string download = Encoding.ASCII.GetString(myDatabuffer);

などを使って、htmlソースやデータを得ることは成功しましたが
罫線に囲まれたデータの摘出がうまくいきません
なにかそれに役立ちそうなコマンドがあれば教えてください


返信引用
渋木宏明(ひどり)
 渋木宏明(ひどり)
(@渋木宏明(ひどり))
ゲスト
結合: 22年前
投稿: 196
 

>罫線に囲まれたデータの摘出がうまくいきません

「罫線に囲まれたデータ」とは、具体的にどんな形式なのでしょう?


返信引用
はる
 はる
(@はる)
ゲスト
結合: 21年前
投稿: 34
Topic starter  

>「罫線に囲まれたデータ」とは、具体的にどんな形式なのでしょう?

例えば下記のURLにあるような株価データです
http://quote.yahoo.co.jp/q?s=4689&d=v1

コード 市場 名称 取引値 前日比 出来高 関連情報
4689 東証1部 ヤフー(株) 12/22 1,320,000 +10,000 +0.76% 3,021

こんな感じに摘出したいのですが・・
(カンマは邪魔ですが)


返信引用
suzuka
 suzuka
(@suzuka)
ゲスト
結合: 22年前
投稿: 46
 

エンコードに ASCII を指定しているのが最初の問題点。
日本語ページなのに ASCII を指定していることが
おかしいことに気付いてください。

で、Yahoo! は通常 EUC コードなんで
「EUC-JP」を指定してやりましょう。


返信引用
渋木宏明(ひどり)
 渋木宏明(ひどり)
(@渋木宏明(ひどり))
ゲスト
結合: 22年前
投稿: 196
 

まさか

>例えば下記のURLにあるような株価データです
> http://quote.yahoo.co.jp/q?s=4689&d=v1

のページにある「HTML 文書」から

>コード 市場 名称 取引値 前日比 出来高 関連情報
>4689 東証1部 ヤフー(株) 12/22 1,320,000 +10,000 +0.76% 3,021

という「データ」を抽出したいんですか?

そら大変だ。

1個や2個の命令くらいでそんなこと出来たらプログラミングなんて作業はいらないっ
すねーw

考え付くところでは

・真面目に HTMLDOM を解析して目的のデータを抽出する
・対象のページの特性を探して文字列抽出する

なんて感じです。


返信引用
はる
 はる
(@はる)
ゲスト
結合: 21年前
投稿: 34
Topic starter  

>1個や2個の命令くらいでそんなこと出来たらプログラミングなんて作業はいらない
っすねーw

耳が痛い・・・
やっぱりVBAで我慢するかな;

>「EUC-JP」を指定してやりましょう。

ユニコードやUTF7, UTF8 を指定できますが
Encoding.EUC-JP.GetString(myDatabuffer);
とするとコンパイルエラーになります?


返信引用
渋木宏明(ひどり)
 渋木宏明(ひどり)
(@渋木宏明(ひどり))
ゲスト
結合: 22年前
投稿: 196
 

>やっぱりVBAで我慢するかな;

運用で困らないならそれも手です。

言語自体の設計思想が違うので、C# に VBA のような簡潔さを求めるの無意味です。

逆に、キメ細かな処理の記述や、精密なエラーハンドリングなどを VBA に求めても無駄
です。

データソースとなる Web ページの構造にかなり仮定を持ち込んでも、C# では、最初の
投稿に書かれた VBA より短いコードで記述するのは難しいです。


返信引用
suzuka
 suzuka
(@suzuka)
ゲスト
結合: 22年前
投稿: 46
 

>とするとコンパイルエラーになります?

なるでしょうねぇ。
そこで Encoding クラスの仕様について
調べるべきことに気付いてください。

それでも分からなければ
もう一度きいてください。


返信引用
はる
 はる
(@はる)
ゲスト
結合: 21年前
投稿: 34
Topic starter  

>そこで Encoding クラスの仕様について
>調べるべきことに気付いてください。

>それでも分からなければ
>もう一度きいてください。

期待を裏切るようで悪いですがさっぱりわかりません
自慢ではないですがサンプルソースも無くヘルプの仕様だけ読んで
理解できるレベルではありません
MSの格調高い解説は私とは相性が悪いようです(^^)


返信引用
suzuka
 suzuka
(@suzuka)
ゲスト
結合: 22年前
投稿: 46
 

相性が悪いで片づけてしまうのですか?

わたしも MS のドキュメントは慣れるまで苦労しましたが
今では普通に意味が分かるようになりました。
はじめから楽に読んでいた訳ではありません。

わたしは好意の回答者ではなく、
質問者が自力で階段を上るのを見てるのが好きなだけですから
本人にやる気がないと判断した場合は見捨てます。
そうなったときは他の人にあたってください。

本題。Encoding クラスで「概要」をみると
しっかりこんなのが書いてあるんですが。
>GetEncoding メソッドは、他のエンコーディングを取得するために、
>コード ページまたは名前パラメータと共に使用します。


返信引用
はる
 はる
(@はる)
ゲスト
結合: 21年前
投稿: 34
Topic starter  

>>GetEncoding メソッドは、他のエンコーディングを取得するために、
>>コード ページまたは名前パラメータと共に使用します。
やっとわかりました

>質問者が自力で階段を上るのを見てるのが好きなだけですから
という事なので答えは伏せておきましょう(^^)
データの摘出はHTMLの文法の解読が必要ということで
ひとまずここで解決とさせていただきます
ありがとうございました


返信引用
渋木宏明(ひどり)
 渋木宏明(ひどり)
(@渋木宏明(ひどり))
ゲスト
結合: 22年前
投稿: 196
 

>という事なので答えは伏せておきましょう(^^)

そういうのもどうかなぁ。

>データの摘出はHTMLの文法の解読が必要ということで
>ひとまずここで解決とさせていただきます

手が無いわけではないですが、Excel VBA のような短いコードで実現するのは無理で
す。

サーバサイドでの実行を考えていなければ、ブラウザコントロールを使うことで多少手
間を軽減させることができます。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました