2

FireFoxの「要素の検査」機能を使用すると、HTMLソースファイルに表示されないdivタグがあります。つまり、必要な情報はJavaScriptコードにありますが、HTMLページのソースにはありません。この情報をRに読み込む方法はありますか?

同様の質問を見つけました:Rを使用してWebページのソースコードを表示するにはどうすればよいですか?

提案されたコードで:

mz <- socketConnection("localhost", "4242")
writeLines("var w=window.open(\"https://google.com\")\n",mz)
out <- readLines(mz) #empty the buffer
writeLines("w.document.getElementsByTagName('html')[0].innerHTML\n", mz)
out <- readLines(mz)
str(out)

しかし、それは私のためにchr(0)を返します。

誰かが上記のRコードを手伝ったり、別の解決策を提案したりできますか?

ありがとう。

解決済み:上記のコードは以前は機能していませんでしたが、ページを読み込むのに十分な時間がなかったことが原因でした。おそらくこの問題に取り組むための最も効率的な方法ではありませんが、それでも解決策です。みんな、ありがとう

4

2 に答える 2

6

RCurlから使用してHTTP応答を取得できgetURLます。

library(RCurl)
address <- "https://discussions.apple.com/thread/4356115?tstart=0"
txt <- getURL(address)

これで、開始タグで文字列を吐き出し、終了タグでそれを分割できます

ss <- strsplit(txt, "<strong class=\"jive-thread-reply-message-correct-label\">")[[1]]
strsplit(ss[2], "</strong>")[[1]][1]

これは次のようになります。

[1] "This solved my question"

必要なdivタグが複数あることがわかりましたが、上記のタグは間違っています。純粋にRでそれを行う方法はわかりませんが、 VitoshKaから参照された投稿をフォローして、機能させることができました。

まず、Firefoxで[ツール]->[アドオン]に移動します。mozreplを検索してインストールします。次に、Firefoxで[ツール]->[MozRepl]->[開始]をクリックします。

さて、Rで:

mz <- socketConnection("localhost", "4242")
writeLines("var w=window.open(\"https://discussions.apple.com/thread/4356115?tstart=0\")\n",mz)
out <- readLines(mz) #empty the buffer
writeLines("w.document.getElementsByTagName('html')[0].innerHTML\n", mz)
out <- readLines(mz)

(loc <- grep("jive-thread-reply-message-correct-label", out))
#[1] 1150 2845

さて、outベクトルlocはあなたのタグを含む文字列の位置を保持します。2回表示されます。最初のものはあなたが興味を持っているものです。

out[loc[1]]

strsplit上で示したのと同じ方法で、または正規表現を使用して、これから情報を抽出できます。gsub


で開くウィンドウを閉じることができますwriteLines("w.window.close()", mz)

于 2013-01-24T00:35:43.300 に答える
0

htmlで完全なjavascriptインタープリターを実行する必要があります。

Rhinoを使用できます。遅くなります。

それ以外の場合は、 SeleniumRCのようにブラウザを駆動する必要があります。(selenium .netライブラリを使用できます)

素朴なスクレイピングよりも、JavaScriptが何をするのかを調べて理解するほうがよいでしょう。

スクレイピングを真剣に考えている場合は、XPATHクエリも学習してください。

于 2013-01-23T23:59:59.397 に答える