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

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

新規登録して質問してみよう
ただいま回答率
85.50%
スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

JavaScript

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

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

2回答

9165閲覧

動的にhtmlを生成するWebサイトをスクレイピングするにはどのような方法があるか?

kzsegs

総合スコア11

スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

JavaScript

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

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2017/09/15 23:40

###前提・実現したいこと
Webサイトのデータをスクレイピングするコードを書きたい。
(ターゲットのWebサイトは社内イントラネット。諸般の事情で当該サイトからcsvやその他の方法でデータ連携はできないため、スクレイピングでのデータ取得を検討中)

###質問したいこと
Javascriptでページを動的生成しているサイトの場合、どのような方法が考えられるか?

ググる場合のキーワードなどを教えていただければ幸いです。

###試したこと

下記を参考にコードを記載したが、静的htmlで記載されたhtmlファイルは取得できたが、動的に生成している部分は取得できなかった。
https://ja.stackoverflow.com/questions/33522/swift3-モバイルサイトのhtmlデータ-取得方法について

コードのみ ※ほぼ上記サイトそのまま

let siteUrl: String = "http://intrasite.xxx.co.jp/a/b/c/index.html" override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. getHtmlDataAsync(url: siteUrl) {html in //code print(html) //for debug. ←ココで取得したhtmlを見ると動的生成部分は含まれない } } //###非同期処理を書くのは、完了ハンドラーパターンが簡単 func getHtmlDataAsync(url: String, completion: @escaping(String)->Void) { let request = URLRequest(url: URL(string: url)!) let task = URLSession.shared.dataTask(with: request) {data, response, error in if let error = error { completion("<error>"+error.localizedDescription+"</error>") return } guard let data = data else { //###ここを通ることはないはず completion("<error>data nil</error>") return } let html = String(data: data, encoding: .shiftJIS) ?? "bad encoding" completion(html) } task.resume() }

###補足情報(言語/FW/ツール等のバージョンなど)
使用言語はswift3,プラットフォームはiPhone(iOS)

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

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

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

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

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

guest

回答2

0

「JavaScriptで動的にデータを表示できている」ということは、JavaScriptでアクセスしてデータを返してくるAPIがあるということなので、それを調べてアクセスする形にするのがいいでしょう。

JavaScriptまで込みでスクレイピングを行おうとすれば、JavaScriptの動くブラウザ環境(Headless Chrome、PhantomJSなど)で行う必要がありますので、より手間になります。

投稿2017/09/16 00:02

maisumakun

総合スコア145121

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

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

kzsegs

2017/09/16 00:59

回答ありがとうございます。下にも書きましたが、直接jsonを取得できることがわかりました。
guest

0

ベストアンサー

ページに意味が無いのであれば、データだけ抜けば良いです。
JavaScript で生成するということは、ajax 等で api を叩く仕様になっていると思いますので、そちらの仕様を確認し、アクセス権限を付与してもらえば、ややこしいことをしなくても、データを入手することが出来ます。

投稿2017/09/15 23:59

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

kzsegs

2017/09/16 00:58

回答ありがとうございます。確かにそうですね。思いつきませんでした。htmlファイルの中に<script>タグで囲まれたjavascriptに、そのまんまjsonを取ってくる処理が書いていたので、それをそのまま使うことにしました。 先着1名様をベストアンサーにさせていただきます。
退会済みユーザー

退会済みユーザー

2017/09/16 01:11

管理者には連絡入れておいたほうが良いですよ。 api の仕様も開示してもらったほうがイイです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問