4

私はrvestウェブスクレイピングに使用しています - 試験的に、IMDB から映画のレビュースコアをスクレイピングしています。この例では、このサイトからすべてのレビューと関連するユーザー名を取得しようとしています。すべてのレビューに星の評価があるわけではないことに注意してください。私が欲しいのは、星の評価があるレビューだけです。

私の開始コード:

library(rvest)
library(magrittr)

id = "0000001"
reviews = paste0("http://www.imdb.com/title/tt",id,"/reviews-index?start=0;count=10000000") %>% 
  html() %>%
  html_nodes(xpath='//td[contains(@class, "comment-summary")]') 

これは、期待どおりに 11 件のレビューのリストを返します (この映画には 11 件のレビューがあります)。

次に、このリストを移動して星評価の存在を確認しようとすると、予期しない結果が得られます。

reviews %>%
  .[[1]] %>%
  html_node(xpath='//img[contains(@width,"102")]')

これにより、

<img width="102" height="12" alt="10/10" src="http://i.media-imdb.com/images/showtimes/100.gif"/>

しかし、最初のレビューには実際には次のものしか含まれていません。

<td class="comment-summary">
<a href="/user/ur0093335/"><img class="avatar" src="http://ia.media-imdb.com/images/M/MV5BMjI2NDEyMjYyMF5BMl5BanBnXkFtZTcwMzM3MDk0OQ@@._SX40_SY40_SS40_.jpg" height="width="/></a>
<h2><a href="reviews?count=10000000&amp;start=0">one-shot record of a belly dancer</a></h2>

<b>Author:</b>
     <a href="/user/ur0093335/">Brian Fuller (bfuller@montreat.edu)</a>
      <small>on 12 August 1998</small>
</td> 

私のimgコードによって返された は、サブセットに存在しません。 実際にhtmlをサブセット化して、その後のhtml_node()操作を直感的に行うにはどうすればよいですか?

4

2 に答える 2

0

これは非常にぎこちなく感じますが、うまくいきます。

library(XML)
reviews %>%
  .[[1]] %>%
  saveXML() %>%
  html() %>%
  html_node(xpath='//img[contains(@width,"102")]')

からのsaveXML関数library(XML)は、HTML のサブセットの文字列を返します。この文字列は、XML ドキュメントとして読み込むことができますが、ドキュメントの残りの部分のオーバーヘッドはありません。

于 2015-02-16T14:16:52.947 に答える