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文件,看起来像下面的截图,包含适当的汉字和假名,可以在离线情况下进行挖掘和操作:
![由Perl脚本生成的CSV文件](https://istack.dev59.com/zpDnc.webp)
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页面的头部显示字符集为utf-8,并且我已经在getURL
调用和write.table
函数中设置了编码为utf-8,但这仅此而已还不够。
问题: 如何使用R抓取上述网页并将文本保存为“格式正确”的日语文本,而不是看起来像行噪音的东西?
编辑:我添加了进一步的屏幕截图,以展示当我省略Encoding
步骤时会发生什么。我得到的是Unicode代码,而不是字符的图形表示。这可能是某种与区域设置相关的问题,但在完全相同的区域设置下,Perl脚本确实提供了有用的输出。所以这仍然很困惑。
我的会话信息:
R版本2.15.0 Patched (2012-05-24 r59442)
平台:i386-pc-mingw32/i386 (32-bit)
区域设置:
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 Kingdom.1252
附加的基本包:
1 stats graphics grDevices utils datasets methods base
Encoding(txt) <- "bytes"
,在我的环境中它可以正常工作。 - kohskeEncoding()
,但不幸的是我没有成功。 - SlowLearner