9

Trip Advisor から一部のデータをスクレイピングするクローラーを作成したいと考えています。理想的には 、 ( a)クロールするすべての場所へのリンクを特定し、 (b)各場所のすべてのアトラクションへのリンクを収集し、 (c)すべてのレビューの目的地名、日付、および評価を収集します。ここでは、(a) の部分に焦点を当てたいと思います。

これが私が始めているウェブサイトです: http://www.tripadvisor.co.nz/Tourism-g255104-New_Zealand-Vacations.html

ここに問題があります。リンクは、最初にトップ 10 の目的地を提供し、次に [人気のある目的地をもっと見る] をクリックすると、リストが展開されます。これを実現するためにJavaScript関数を使用しているように見えます。残念ながら、私は JavaScript に詳しくありませんが、次のチャンクがその仕組みについての手がかりになると思います。

<div class="morePopularCities" onclick="ta.call('ta.servlet.Tourism.showNextChildPage', event, this)">
<img id='lazyload_2067453571_25' height='27' width='27' src='http://e2.tacdn.com/img2/x.gif'/>
See more popular destinations in New Zealand </div>

rvest、RSelenium、XML、RCurlなど、R用の便利なWebスクレイピングパッケージをいくつか見つけましたが、これらのうち、RSeleniumだけがこれを解決できるようです。アウト。

関連するコードを次に示します。

tu = "http://www.tripadvisor.co.nz/Tourism-g255104-New_Zealand-Vacations.html"
RSelenium::startServer()
remDr = RSelenium::remoteDriver(browserName = "internet explorer")
remDr$open()
remDr$navigate(tu)
# remDr$executeScript("JS_FUNCTION")

ここでは最後の行でうまくいくはずですが、ここでどの関数を呼び出す必要があるのか​​ わかりません。

このリストを拡張すると、パート (b) を解決するのと同じ方法で各目的地へのリンクを取得できるようになります。これは既に解決済みだと思います (興味のある人向け)。

library(rvest)
tu = "http://www.tripadvisor.co.nz/Tourism-g255104-New_Zealand-Vacations.html"
tu = html_session(tu)
tu %>% html_nodes(xpath='//div[@class="popularCities"]/a') %>% html_attr("href")
 [1] "/Tourism-g255122-Queenstown_Otago_Region_South_Island-Vacations.html"                      
 [2] "/Tourism-g255106-Auckland_North_Island-Vacations.html"                                     
 [3] "/Tourism-g255117-Blenheim_Marlborough_Region_South_Island-Vacations.html"                  
 [4] "/Tourism-g255111-Rotorua_Rotorua_District_Bay_of_Plenty_Region_North_Island-Vacations.html"
 [5] "/Tourism-g255678-Nelson_Nelson_Tasman_Region_South_Island-Vacations.html"                  
 [6] "/Tourism-g255113-Taupo_Taupo_District_Waikato_Region_North_Island-Vacations.html"          
 [7] "/Tourism-g255109-Napier_Hawke_s_Bay_Region_North_Island-Vacations.html"                    
 [8] "/Tourism-g612500-Wanaka_Otago_Region_South_Island-Vacations.html"                          
 [9] "/Tourism-g255679-Russell_Bay_of_Islands_Northland_Region_North_Island-Vacations.html"      
[10] "/Tourism-g255114-Tauranga_Bay_of_Plenty_Region_North_Island-Vacations.html"  

ステップ (c) に関しては、そのために役立つリンクをいくつか見つけました: https://github.com/hadley/rvest/blob/master/demo/tripadvisor.R http://notesofdabbler.github. io/201408_hotelReview/scrapeTripAdvisor.html

上位の目的地のリストを拡大する方法や、他の手順をよりスマートに進める方法についてのヒントがあれば、お知らせください。ぜひご連絡をお待ちしております。

よろしくお願いします!

4

1 に答える 1

3

基本的に、クリック イベントを に送信しようとすることができます<div class="morePopularCities">。このようなもの :

remDr$navigate(tu)
div <- remDr$findElement("class", "morePopularCities")
div$clickElement()

すべての場所を展開するには、上記のロジックを while ループで繰り返すことができます。<div>使用可能なアイテムがなくなるまで (divがページに表示されなくなるまで)をクリックし続けます。

divs <- remDr$findElements("class", "morePopularCities")
while(length(divs )>0) {
  for(div in divs ){
    div$clickElement()
  }
  divs <- remDr$findElements("class", "morePopularCities")
}

私はR.

于 2015-04-18T06:46:51.603 に答える