暇人の研究室

金融工学やR言語・統計学について書いてます。

<

【Web技術】Rでのスクレイピングにおける文字コードの確認と変換

 

 

文字コードとは?

 

 コンピュータ内部では文字であろうと画像であろうと、あらゆるものを数値で処理しています。

 

文字コードとはPC上で文字を表示させる仕組みで、ひらがな・カタカナ・漢字にそれぞれ特定の数値を当てはめて区別する仕組みです。

 

ちなみに日本語の場合は、macやlinuxで使われている「UTF-8」とWindowsで使われている「Shift_JIS」の2つが主流です。

 

ちなみに世界では「UTF-8」が主流となりつつあり、もしWindows版のプログラムでUTF-8で作成されたHTMLを読み込む際、文字データが正確に表示されないいわゆる文字化けが起こることがあります。

 

 

Rを使って文字コードを変換する

 

  まずひらがなの「あ」の文字コードを見てみます。

 

文字コードは16進法という「0123456789 a b c d e f」の16個の英数字で構成された特殊な記述法で表現されます。

 

 

> charToRaw("あ")
[1] 82 a0
> charToRaw("た")
[1] 82 bd

> charToRaw("w")
[1] 77

 

 

Windowsに使われているShift_JISだと1つの日本語を2つの数値で返し、アルファベットは1つの数値で返します。

 

ちなみにRでは文字コードを変換することができます。というわけでShift_JISをmacやlinuxで使われているUTF-8に変換してみます。

 

WindowsではUTF-8は文字化けするんじゃないかったの?と思いますがWindows版Rでは、UTF-8の文字コードでも文字化けしません。

 

 

> a<-"あ"

> a<-iconv(a, to = "UTF-8")
> charToRaw(a)
[1] e3 81 82

 

 UTF-8では日本語の文字を3つの数値を使って表現します。

 

 

対象サイトの文字コードを確認

 

スクレイピングする際に、対象のサイトの文字コードを確認しないとデータをスクレイピングしても上手く関数が動かないことがあるので、まず確認する必要があります。

 

>library(rvest)

>library(dplyr)

>x<-read_html("http://www.tkstock.site/")

> x%>%html_node(xpath="//meta[@content |@charset]")
{xml_node}
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

 

今回はUTF-8でしたが、もし対象とするサイトの文字コードがUTF-8でなかったときはread_html()に、encording=”UTF-8”という引数を指定して文字コードをUTF-8に変換しておくのが無難です。

 

 

 x<-read_html("http://www.tkstock.site/",encording="UTF-8")

 

ですがテキストマイニングなどを行う場合は、CP932の方がオススメです。

 

x<-read_html("http://www.tkstock.site/",encording="CP932")