0

R での Web スクレイピングの最初の演習では、販売されているオペラのチケットを検索して、最終的に最良の取引を見つける方法を見つけようとしています。私は2つのことをしたいと思います:

  1. カテゴリと価格のテーブルを作成して、任意のカテゴリで最高の価格を検索できるようにします
  2. 最良の取引 (カテゴリごとの価格) の http アドレスへのリンクを保存します。

私が遭遇した問題は、15 個の観測値しか表示できないということですが、表はさらに大きくなる可能性があります。

library(rvest)
rmSpace <- function(x){
        x<-gsub("\t","",x) 
    x<-gsub("\n","",x)
}

page <- url %>% html()

date <- page %>%
   html_nodes(".date-tabdyn") %>%
   html_text() 
date <- date[-1]
date <-rmSpace(date)

category <-  page %>%
  html_nodes(".td_description .bold") %>%
  html_text() 
category<-rmSpace(category)

description <-  page %>%
  html_nodes(".td_description") %>%
  html_text() 
description <- description[-1]
description <- rmSpace(description)

price <-  page %>%
  html_nodes(".valeur_revente .montant-numeric") %>%
  html_text() 

price_normal <-  page %>%
  html_nodes(".valeur_faciale .montant-numeric") %>%
  html_text() 

links <-  page %>% html_nodes(".button_eae9e5") %>% html_attr("onclick")
links <- substr(links,31,nchar(links)-2)
tab <- cbind(category, price, price_normal, date, description, links)

更新: rvest を使用して素敵なテーブルを取得できましたが、15 ビューの制限を解決する方法がわかりません。

更新 2: json ファイルを返す POST 要求があるようです。それを使用して、より大きなテーブルを返すことができると思いますが、その方法がわかりません。

4

1 に答える 1

4

RSelenium を調べる必要があります。Selenium の詳細はhttp://docs.seleniumhq.org/から入手できます。

基本的に、Selenium は実際の Web ページをレンダリングする Web ブラウザーを作成し、生成された HTML をスクレイピングできます。使用するブラウザーに応じて、あらゆる種類の楽しい Web プロトコルを処理できます。R で使いやすい Web ブラウザーの 1 つは、phantomJS ( http://phantomjs.org/ ) です。

以下のコードを検討してください。まず、phantomJS 実行可能ファイルを指定し (カスタム プロキシを指定することもできます!)、ドライバーを作成してセッションを開きます。PhanomJS が優れている理由の 1 つは、「ヘッドレス」であるため、余分なウィンドウが表示されないことです。次に、ファントム Web ブラウザーに URL に移動するように指示し、ソースを取得します。

pJS = phantom(pjs_cmd="C:/phantomjs2/bin/phantomjs.exe",extras="--proxy=localhost:3128")
remDr = remoteDriver(browserName = 'phantomjs')
remDr$open()

remDr$navigate(url)
soup = remDr$getPageSource()

一般に、私にとっては、これにより、あなたが説明したような Web アクセスの問題の 90% が修正されました。

于 2015-02-15T16:37:25.037 に答える