31895


[この](http://www.oricon.co.jp/rank/js/w/2017-01-16/p/4/)ウエブページをスクレイピングしたいんですが、`rvest`を用いてやろうと以下のエラーがでます：

[code]

    library(rvest)
    URL = 'http://www.oricon.co.jp/rank/js/w/2017-01-16/p/4/'
    read_html(URL)
    
[/code]

> Error in `eval(substitute(expr), envir, enclos)` :  
>  input conversion failed due to input error, bytes 0xFA 0xB1 0x90 0xE7
> [6003]

同じサイトからそれ以外のページは問題はありません、例えば：

[code]

    read_html('http://www.oricon.co.jp/rank/js/w/2017-01-16/p/2/')
    # {xml_document}
    # <html>
    # [1] <head prefix="og: http://ogp.me/ns# fb: http://ogp.me/ns/fb#">\n  <meta charset="shi ...
    # [2] <body id="container">&#13;\n<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11 ...
    
[/code]

[これ](https://github.com/hadley/rvest/issues/117)(英語）を読んで文字コードを調べようとしました：

[code]

    library(httr)
    guess_encoding(content(GET(URL), 'raw'))
    #     encoding language confidence
    # 1 ISO-8859-1       pt       0.72
    # 2 ISO-8859-2       ro       0.44
    # 3      UTF-8                0.10
    # 4  Shift_JIS       ja       0.10
    # 5    GB18030       zh       0.10
    # 6     EUC-JP       ja       0.10
    # 7     EUC-KR       ko       0.10
    # 8       Big5       zh       0.10
    # 9 ISO-8859-9       tr       0.01
    
[/code]

でもその中二つだけが日本語です。その二つも同じエラーをだせます：

[code]

    read_html(URL, encoding = 'Shift_JIS')
    
[/code]

> Error in `eval(substitute(expr), envir, enclos)` :  
>  input conversion failed due to input error, bytes 0xFA 0xB1 0x90 0xE7
> [6003]
[code]

    read_html(URL, encoding = 'EUC-JP')
    
[/code]

> Error in `eval(substitute(expr), envir, enclos)` :  
>  input conversion failed due to input error, bytes 0x8F 0x54 0x8A 0xD4
> [6003]

このページ`Shift_JIS`/`EUC-JP`意外の文字コードに当たりませんか？

下手の日本語申し訳ありません。よろしくお願いいたします!


CC BY-SA 3.0
2017-01-16T21:11:42.500
31894
2017-01-17T11:44:44.557
18598
question
r
ページをスクレイピングしようと文字コードエラーがでます


訂正：OOPerさんの指摘通り、このウェブページの文字コードはShift_JISではなく[Windows-31J](https://en.wikipedia.org/wiki/Code_page_943)でした。[CP932](https://en.wikipedia.org/wiki/Code_page_932)を指定して`read_html(URL,encoding
= "cp932")`でもいけるようです。ということで以下の回答は的外れなものです。失礼しました。。

~~上でコメントされているように、この文字が引っかかっているようですね。文字コードはShift_JISであっています。~~

[code]

    rawToChar(as.raw(c(0xFA, 0xB1, 0x90, 0xE7)))
    [1] "﨑千"
    
[/code]

~~これがrvestのバグなのかはよくわかりませんが、以下のように`httr::GET()`でUTF-8のテキストとしてダウンロードしたあとに`read_html()`するとうまくいくようです。~~

[code]

    library(httr)
    library(rvest)
    
    x <- GET('http://www.oricon.co.jp/rank/js/w/2017-01-16/p/4/')
    x_text <- content(x, as = "text")
    
    # 文字コードはUTF-8になる
    Encoding(x_text)
    #> [1] "UTF-8"
    
    x_xml <- read_html(x_text)
    
    x_nodes <- x_xml %>%
      html_nodes("section.box-rank-entry > div > a > div > p")
    
    # このノードの「﨑千」がエラーになっていたが、今回はきちんと表示できる
    x_nodes[7] %>%
      html_text()
    #> [1] "川島瑞樹(CV:東山奈央),日野茜(CV:赤﨑千夏),堀裕子(CV:鈴木絵理),上田鈴帆(CV:春野ななみ),難波笑美(CV:伊達朱里紗)"
    
[/code]

~~`sessionInfo`は以下です。~~

[code]

    sessionInfo()
    #> R version 3.3.2 (2016-10-31)
    #> Platform: x86_64-w64-mingw32/x64 (64-bit)
    #> Running under: Windows >= 8 x64 (build 9200)
    #> 
    #> locale:
    #> [1] LC_COLLATE=Japanese_Japan.932  LC_CTYPE=Japanese_Japan.932    LC_MONETARY=Japanese_Japan.932 LC_NUMERIC=C                   LC_TIME=Japanese_Japan.932    
    #> 
    #> attached base packages:
    #> [1] stats     graphics  grDevices utils     datasets  methods   base     
    #> 
    #> other attached packages:
    #> [1] httr_1.2.1      rvest_0.3.2     xml2_1.0.0.9001
    #> 
    #> loaded via a namespace (and not attached):
    #> [1] selectr_0.3-1 magrittr_1.5  R6_2.2.0      tools_3.3.2   curl_2.3      Rcpp_0.12.8   stringi_1.1.2 stringr_1.1.0 XML_3.98-1.5 
    
[/code]


CC BY-SA 3.0
2017-01-16T21:50:05.533
31895
2017-01-17T11:44:44.557
2017-01-17T11:44:44.557
2544
2544
31894
answer