使用 R,我正在尝试抓取网页,将日文文本保存到文件中。最终,这需要扩展以每天处理数百个页面。我已经在 Perl 中有一个可行的解决方案,但我正在尝试将脚本迁移到 R 以减少在多种语言之间切换的认知负担。到目前为止,我还没有成功。相关问题似乎是关于保存 csv 文件的问题和关于将希伯来语写入 HTML 文件的问题。但是,我还没有成功地根据那里的答案拼凑出一个解决方案。编辑:关于 R 的 UTF-8 输出的这个问题也是相关的,但没有得到解决。
这些页面来自雅虎!Japan Finance 和我的 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 并留下文本(这个答案建议使用 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 页面的标题说图表集是 utf-8,我已将getURL
调用和write.table
函数中的编码设置为 utf-8,但仅此还不够。
问题 如何使用 R 抓取上述网页并将文本保存为“格式良好”的日文文本中的 CSV,而不是看起来像线条噪音的东西?
编辑:我添加了一个进一步的屏幕截图,以显示当我省略该Encoding
步骤时会发生什么。我得到了看起来像 Unicode 代码的东西,但不是字符的图形表示。这可能是某种与语言环境相关的问题,但在完全相同的语言环境中,Perl 脚本确实提供了有用的输出。所以这仍然令人费解。我的会话信息:R 版本 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 Kingdom.1252
附加基础包:
1stats graphics grDevices utils datasets methods base