使用R,我試圖抓取保存日文文本的網頁到文件。最終,這需要擴展到每天處理數百頁。我在Perl中已經有了一個可行的解決方案,但我正在嘗試將腳本遷移到R,以減少在多種語言之間切換的認知負載。到目前爲止,我沒有成功。相關的問題似乎是this one on saving csv files和this one on writing Hebrew to a HTML file。然而,我並沒有成功地根據那裏的答案來拼湊一個解決方案。編輯:this question on UTF-8 output from R is also relevant but was not resolved.R:從RCurl抓取的網頁中提取「乾淨的」UTF-8文本
這些網頁來自Yahoo!日本財務和我的Perl代碼,看起來像這樣。
use strict;
use HTML::Tree;
use LWP::Simple;
#use Encode;
use utf8;
binmode STDOUT, ":utf8";
my @arr_links =();
$arr_links[1] = "http://stocks.finance.yahoo.co.jp/stocks/detail/?code=7203";
$arr_links[2] = "http://stocks.finance.yahoo.co.jp/stocks/detail/?code=7201";
foreach my $link (@arr_links){
$link =~ s/"//gi;
print("$link\n");
my $content = get($link);
my $tree = HTML::Tree->new();
$tree->parse($content);
my $bar = $tree->as_text;
open OUTFILE, ">>:utf8", join("","c:/", substr($link, -4),"_perl.txt") || die;
print OUTFILE $bar;
}
這Perl腳本產生的CSV文件,看起來像下面的截圖,在適當的漢字和假名可開採和操縱脫機:
我R代碼裏面,如它是,看起來像下面。 R腳本並不是剛剛給出的Perl解決方案的完全重複,因爲它不會去掉HTML並保留文本(this answer建議使用R的方法,但在這種情況下它不適用於我),它不會沒有循環等,但意圖是一樣的。
require(RCurl)
require(XML)
links <- list()
links[1] <- "http://stocks.finance.yahoo.co.jp/stocks/detail/?code=7203"
links[2] <- "http://stocks.finance.yahoo.co.jp/stocks/detail/?code=7201"
txt <- getURL(links, .encoding = "UTF-8")
Encoding(txt) <- "bytes"
write.table(txt, "c:/geturl_r.txt", quote = FALSE, row.names = FALSE, sep = "\t", fileEncoding = "UTF-8")
此R腳本生成以下屏幕截圖所示的輸出。基本上垃圾。
我認爲有HTML,文本和文件編碼的某種組合,讓我到R中產生類似的結果是,Perl的解決方案,但我不能找到它。我試圖抓取的HTML頁面的標題說,chartset是utf-8,我已經將getURL
調用中的編碼和write.table
函數中的編碼設置爲utf-8,但這僅僅是不夠的。
如何使用R I颳去上面的網頁並保存文本CSV在「結構良好」的日文文本,而不是東西,看起來像線路噪聲問題?
編輯:我添加了一個進一步的屏幕截圖,以顯示當我省略步驟Encoding
時會發生什麼。我看起來像是Unicode代碼,但不是字符的圖形表示。它可能是某種與語言環境相關的問題,但在完全相同的語言環境中,Perl腳本確實提供了有用的輸出。所以這仍然令人困惑。 我的會話信息: ř版本2.15.0修補的(2012-05-24 r59442) 平臺:I386-PC-的mingw32/I386(32位) 區域設置: 1 LC_COLLATE = English_United Kingdom.1252 2 LC_CTYPE = English_United Kingdom.1252
3 LC_MONETARY = English_United Kingdom.1252 4 LC_NUMERIC = C
5 LC_TIME = English_United王國。1252個
附加基本軟件包: 1統計圖形grDevices utils的數據集的方法基礎
也許你不需要'編碼(txt)< - 「字節」,它在我的環境中運行良好。 – kohske
@kohske,謝謝你的建議。我有另一個嘗試沒有'Encoding()';不幸的是我沒有成功。 – SlowLearner