質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Monaca

「Monaca」はiOS、Android、Windows向けのアプリ開発に対応した、Cordovaベースのモバイルアプリ開発プラットフォームです。HTML5、JavaScriptといったWeb標準技術を用いてモバイルアプリ開発を行うことができます。

Q&A

解決済

2回答

1443閲覧

外部Webサイトに対するスクレイピング(javascript)

ryo4337

総合スコア9

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Monaca

「Monaca」はiOS、Android、Windows向けのアプリ開発に対応した、Cordovaベースのモバイルアプリ開発プラットフォームです。HTML5、JavaScriptといったWeb標準技術を用いてモバイルアプリ開発を行うことができます。

0グッド

0クリップ

投稿2018/06/18 04:26

編集2018/06/18 04:28

前提・実現したいこと

現在実現したいこととしては、外部Webサイト上の数値情報を取得して、
自身のアプリケーション(HTML,javascriptベース)に利用したいと考えており、
実現方法をご教授いただきたいです。

詳細に言えば、以下サイトの画面右「Total FT in circulation:」
の下に表示されている数値を取得したいと考えています。
https://www.fcoin.com/

試したこと

取得したい情報は<span id=ft_circulation>の値なので、
jquery.js,jquery.xdomainajax.jsを導入し、以下のようなコーディングを行っています。

$(function() { $.ajax({ type: 'GET', url: 'https://www.fcoin.com', dataType: 'html', success: function(data) {      //外部Webサイト情報取得 var ftcirc = $(data.responseText).find("#ft_circulation").text(); //自HTMLに値を書き込み document.getElementById("ftcirc").innerHTML=ftcirc; }, }); });

発生している問題

上記ソースコードを実行すると、ftcirc変数には値が入っていませんでした。

よくよく原因を調べてみると、
”data”はhtml形式で取得できていますが、
肝心の#ft_circulationの値が、取得したhtmlには記載されていませんでした。

ブラウザ(Google Chrome)で直接サイトへアクセスすると、
ページソース上には値も表示されています。

そのため、おそらくjavascriptなどで、後から値を入力しているのだとは思うのですが、
上記のようなコーディングでは取得できないのでしょうか。

###おわりに

参考情報などご教授いただけますと幸いです。
またご不明点等あればご質問いただければと存じます。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

ajaxはたいてい外部urlを取りにいけません
かるくテストしてみたところクロスオリジンのエラーが発生しているようなので
クライアントサイドのjsでは取得は難しいきがします

先方のサービスでapiを提供しているならそれをご利用ください

投稿2018/06/18 04:56

yambejp

総合スコア114829

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ryo4337

2018/06/18 05:07

早速のご回答ありがとうございます。やはり難しいでしょうか。。。 先方もいくつかAPIを用意しているのですが、 当該の値を取得するAPIがなく、悔しい思いをしております。 ちなみにですが、下記サイトで似たようなことを実現されており、 作成者さんにご質問したところ「xdomainajax.jsを利用して取得している」とのことで、 今回実装についてのご質問させていただきました。(作成者さんからは、ソースコード等はいただいていません。) https://sizuku-blog.com/ftcalc/ クライアントサイドで難しいようであれば、 別途サーバなどを用意してあげるべきですかね。。。
yambejp

2018/06/18 05:15

なんとも言えませんが、サービス側が提供していないものは クライアントの勝手な処理でデータを入手するのは難しいです。 とはいえ単純なテキストベースのデータ取得であれば別途ご自身で クローラーを実働させる環境をつくれば、それをクッションしてデータを 取ることはできるでしょう。 jsで動的に作成したページに対するクロールができるものもあるようです
ryo4337

2018/06/18 05:20

>jsで動的に作成したページに対するクロールができるものもあるようです ご確認いただきありがとうございます。 上記クロールの実装について検討し、出直そうかと思います。 お時間いただきましてありがとうございました。
guest

0

JavaScriptは悪意の第三者が作ったWebサービス越しに機密情報を抜き出す対策として、
ドメインの違う別サービスへAjax通信を行う事は禁止されています。

郵便番号を住所に変換するAPI等、
全世界の誰でもAjaxを受け付けても別に構わないというサービスはあると思います。
そのためにCORSという別ドメインからのアクセスを特別に許可するルールがあります。
食わしはCORSで調べて見ると良いでしょう。

というわけで、別ドメインへのAjax通信を禁止するか否かの決定権はそのサービスの提供者側にあり、
スクレイピングで利用しようとしている利用者側には無いということになります。


まぁ、ブラウザがセキュリティ対策目的に堅牢にしているだけの話なので、
Node.jsやPHP等のサーバーサイドのプログラムにURLやセレクター文字列を渡してやって、
サーバーがURLを元にスクレイピングを行うという設計ならば出来ます。

もしWebサーバを立ち上げて行う場合はこういった解決方法になるでしょう。

投稿2018/06/18 06:41

miyabi-sun

総合スコア21158

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ryo4337

2018/06/18 07:57

ご回答ありがとうございます。 CORSについては、前提知識等も踏まえて、 まずは調べようと思います。 その上でお手上げであることが理解できたら、 回答いただいた内容を踏まえて、サーバサイドでの実装に移ろうと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問