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

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

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

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

R

R言語は、「S言語」をオープンソースとして実装なおした、統計解析向けのプログラミング言語です。 計算がとても速くグラフィックも充実しているため、数値計算に向いています。 文法的には、統計解析部分はS言語を参考にしており、データ処理部分はSchemeの影響を受けています。 世界中の専門家が開発に関わり、日々新しい手法やアルゴリズムが追加されています。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

Q&A

解決済

2回答

2055閲覧

RSeleniumでhtmlページ内のjsonをパース・スクレイピングしたい

john_doe

総合スコア8

スクレイピング

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

R

R言語は、「S言語」をオープンソースとして実装なおした、統計解析向けのプログラミング言語です。 計算がとても速くグラフィックも充実しているため、数値計算に向いています。 文法的には、統計解析部分はS言語を参考にしており、データ処理部分はSchemeの影響を受けています。 世界中の専門家が開発に関わり、日々新しい手法やアルゴリズムが追加されています。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

0グッド

0クリップ

投稿2018/08/30 02:49

編集2018/08/30 05:15

前提

Rを使ったWebスクレイピングで下記1-2を実現したいのですが、今回は下記1に絞った形での投稿となります。なおスクレイピングの対象ページは動的な認証ページを経ないとアクセスができないため、RSelenium経由でデータを取得する方法を取っています。

実現したいこと

  1. 特定のhtmlページに記載されているjson型のテキストデータをパースし
  2. このjson型のデータをデータフレームに格納したい

発生している問題

RSeleniumを使って該当ページに辿りつき、ページソースの取得はできているのですが、ページ内で表示されているjsonをfromJSONでうまくパースできず、どのようアプローチをすべきか分かりかねています。

該当ページの表示内容

該当ページでは以下の内容が表示されています。

[{"id":1,"name":"family","middleCategories":[{"id":1,"name":"mother","scenarios":[{"id":105,"name":"son"},{"id":106,"name":"daughter"}]}..(略)..]}]}]

該当のページソース

以下がchromeの開発者ツールで確認した対象ページの大構造です。

<html> <script></script> <head></head> <body></body> </html>

また値は改変していますが、上記bodyタグの中身は以下のように見えています。

<body><pre style=\"word-wrap: break-word; white-space: pre-wrap;\">[{\"id\":1,\"name\":\"family\",\"middleCategories\":[{\"id\":1,\"name\":\"mother\",\"scenarios\":[{\"id\":105,\"name\":\"son\"},{\"id\":106,\"name\":\"daughter\"}]}..(略)..</pre></body>

該当のソースコード

以下のコードを試しました。

R

1#コンテンツを取得(ここに至るまでログイン、遷移の操作は省略) 2res <- remDr$getPageSource()[[1]] 3 4#pageコンテツが取得できているか確認 5res 6 7#json型のコンテンツのように見えるのでjsonとしてパース 8fromJSON(res)

resの出力結果

下記の通りページのコンテンツの取得は問題なくできているように見えています。

[1] "<html xmlns=\"http://www.w3.org/1999/xhtml\"><head></head><body><pre style=\"word-wrap: break-word; white-space: pre-wrap;\">[{\"id\":1,\"name\":\"family\",\"middleCategories\":[{\"id\":1,\"name\":\"mother\",\"scenarios\":[{\"id\":105,\"name\":\"son\"},{\"id\":106,\"name\":\"daughter\"}]}..(略)..</pre></body></html>"

### エラーメッセージ - fromJSON(res)の結果
上述したコードを実行したところ以下のようなエラーメッセージが出る状況です。

R

1Error: lexical error: invalid char in json text. 2 <html xmlns="http://www.w3.org/ 3 (right here) ------^

補足情報(FW/ツールのバージョンなど)

R (3.5.0)
Rstudio (1.1.442)
library(RSelenium)
library(RJSONIO)
library(jsonlite)
library(rvest)

宜しくお願いします。

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

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

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

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

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

guest

回答2

0

自己解決

ページをローカルに保存したら、json データとして保存され、jsonとして読み込めましたので一旦自己解決とさせていただきます。

投稿2018/08/30 07:44

john_doe

総合スコア8

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

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

0

私の眼には、これが正しいJSONデータであるようには見えないし、それ以前に、「<body>タグの中身」であるはずの文字列にhtmlのヘッダーらしき文字列が入っているなど、Rで悩む以前の問題が発生しているように見えます。

投稿2018/08/30 03:59

KojiDoi

総合スコア13669

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

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

john_doe

2018/08/30 05:22

KojiDoi様 ご回答ありがとうございます!ご指摘の通り、body タグの中身は転記ミスのため修正させていただきました。 また該当ページの表示内容を追加したのですが、こちらはやはりjson 形式のデータではないということでしょうか。chromeの開発者モードで当該ページのresponse header を確認したところ、content-typeに”application/json;charset=UTF-8”と記載があったのでjson形式のデータであると想定しました。 色々と分かっておらず、すいませんが、コメントいただけましたら幸いです。
KojiDoi

2018/08/30 05:40

> chromeの開発者モードで当該ページのresponse header を確認 そんなものを鵜呑みにせず、自分でちゃんと確認してください。jsonの構造はシンプルで、その解説はそこらじゅうにあります。<html xmlns=でいきなり始まるjsonデータなどありえません。 エラーメッセージはそのものずばりのことを指摘しています。
john_doe

2018/08/30 07:42

KojiDoi様 ご回答ありがとうございます。確かにご指摘の通りかと思います。自分でちゃんと確認するようしますね。 ><html xmlns=でいきなり始まるjsonデータなどありえません。 なおページをローカルに保存したら、json データとして保存され、jsonとして読み込めましたので一旦自己解決しました。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問