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

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

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

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

Q&A

解決済

1回答

4679閲覧

Rでwebスクレイピング

gotch

総合スコア16

R

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

0グッド

0クリップ

投稿2015/09/05 03:16

Rでwebスクレイピングをしようと思っているのですが、
うまくいっていないのでどうかご教示ください。

とりあえず、ブラウザ上にあるテキストデータをすべて取り込めればいいかなとおもっています。
手動操作で説明すると、
ブラウザ上で、ctrl+a, ctrl+c の後に、
メモ帳で、ctrl+v することを、
Rのプログラミングでやれないものかと思っています。
何かいい方法はないでしょうか?

以下、自分でやってみたことを書きます。

下記サイトを参考にさせていただき、Rでwebスクレイピングをしようとしていますが、うまくいっていません。
http://uytaz.com/2015/02/25/post-905/
上記サイトでは、XML+RCurl の方法と、rvest の方法が記載されています。
いずれにしても、私がxpathの使い方を理解していないからうまくいっていないのだと思ってます。

XML+RCurl の方法では、
targetXPath <- "//p"

rvest の方法では、
html_nodes(xpath = "//p")%>%

この//pを別のものに変えればいいのだろうと見当がついているのですが、
//htmlや//body
では、タグを取り切れていないようで、満足のいくものになっておりません。

特に、xpathにこだわっているわけではありません。
冒頭に書かせていただいたように、
ブラウザ上で、ctrl+a, ctrl+c の後に、
メモ帳で、ctrl+v することを、
Rのプログラミングでやりたいだけなので、
他の方法でもいいものがあれば教えていただけると幸いです。

どうぞよろしくお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

最初に一つお断りしておきますが、
0. ブラウザ上で、[Ctrl + A] → [Ctrl + C] → [Ctrl + V] する
0. html をスクレイピングして文字列を取得する
は、絶対に同じ結果にはなりません。
というのは、ブラウザ上に表示された結果は、html ソースにCSSなどのスタイル要素を適用したものなので、コピー&ペーストで取得された文字列のフォーマットは当然違って来ます。

さて、ご質問に対する回答ですが、以下のようにすると(一応)画面に表示されるであろう文字列(+ゴミ)が取得できます。

R

1library(XML) 2library(RCurl) 3url <- "http://en.wikipedia.org/wiki/RStudio" 4targetCPath <- "/html/body" # body 全体を取得したい場合はこのように指定する 5doc <- getURL(url) 6doc <- htmlParce(doc) 7doc <- htmlParse(doc) 8body <- xpathSApply(doc, targetXPath,xmlValue) # ここで(一応)目的の結果が得られている 9body # これで、取得された結果が画面表示される(改行:\n、TAB:\t で、全体が1行) 10write(body, "test.txt") # カレントディレクトリの test.txt へ出力される

得られた結果の「改行」「TABによるインデント」等は、html ソース自体のものであり、ブラウザ上に表示されたレイアウトとは無関係です。それから、本来ブラウザ上には表示されないはずの、Javascriptのソース等も取得結果に含まれます。
ですから、必要に応じて不要なTABなどを別途削除する必要がありそうです。

こんな結果で目的を達成できますか?

投稿2015/09/06 11:39

pi-chan

総合スコア5936

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

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

gotch

2015/09/07 11:39

回答いただきありがとうございます。 掲載していただいたコードを実行したところ、 Javascriptのコードと思われるものが残っておりました。 WEBスクレイピングってなかなか難しいですね。 WEB上で調べたWEBスクレイピングの記事が一部分だけの抽出ばかりだったのも、 そういう事情からきているのかなと思いました。 でも、なんでできないんでしょうかね。 WEBブラウザではHTML,CSS,Javascriptのタグやコードを理解して(私が今回欲しいと思っている)テキストだけを表示することができているのに、 WEBスクレイピングでは、「~~のタグの内側を抽出」みたいな方法をとってるんですよね。WEBスクレイピングでも、HTML,CSS,Javascriptのタグやコードを理解して抽出すればいいのに、って素人意見ですが思います。
pi-chan

2015/09/07 15:04

今は、具体的な要件が分からなかったために「body」全体を取得したので、たまたまソース末尾に記載されていたJavaScriptのソースも取得されてしまっただけです。 「HTML,CSS,Javascriptのタグやコードを理解して抽出すればいいのに」と仰いますが、今使用しているライブラリは「人工知能ではない」ので、この「理解&判断」は、ライブラリを使用する我々自身が行うべき事柄です。 どんな言語を使用するにせよ、スクレイピングする際には、自ら対象ページの「構造」を事前に確認し、どのような『目印』(=タグやコード)を使って「目的の部分」を抽出すれば良いのかを考えてコーディングします。 ざっと眺めた限りでは、<script>〜</script>の部分だけを除外できれば良いように思いますから、最初にこれを削除してからbody全体を抽出し、その後、得られた文字列から邪魔なTabを削除するなどすれば良いのではないでしょうか? 仮に、スクレイピングが望み通りに実施できていても、対象のページが『少しの模様替え』をした途端にスクレイピングに失敗するようになってしまう、そうしたら都度、変更点を確認して対応する、スクレイピングとはそのようにとても泥臭いものです。
gotch

2015/09/10 14:46

ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問