Mit R versuche ich, eine Webseite abzuschaben und den Text, der auf Japanisch ist, in eine Datei zu speichern. Letztendlich muss dies skaliert werden, um täglich Hunderte von Seiten zu bewältigen. Ich habe bereits eine praktikable Lösung in Perl, aber ich versuche, das Skript auf R zu migrieren, um die kognitive Belastung beim Umschalten zwischen mehreren Sprachen zu reduzieren. Bis jetzt bin ich nicht erfolgreich. Verwandte Fragen scheinen this one on saving csv files und this one on writing Hebrew to a HTML file zu sein. Es ist mir jedoch nicht gelungen, eine auf den Antworten basierende Lösung zu finden. Bearbeiten: this question on UTF-8 output from R is also relevant but was not resolved.R: Extrahieren von "sauberem" UTF-8-Text von einer mit RCurl gecrackten Webseite
Die Seiten stammen von Yahoo! Japan Finance und mein Perl-Code, der so aussieht.
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;
}
Diese Perl-Skript erzeugt eine CSV-Datei, die unten wie der Screenshot sieht, mit dem richtigen Kanji und Kana, die abgebaut werden können und offline manipulierten:
Mein R-Code, wie es ist, sieht wie folgt aus. Das R-Skript ist kein exaktes Duplikat der gerade gegebenen Perl-Lösung, da es den HTML-Code nicht ausstreicht und den Text zurücklässt (schlägt einen Ansatz mit R vor, funktioniert aber in diesem Fall nicht) und tut es auch nicht Ich habe die Schleife und so weiter, aber die Absicht ist dieselbe.
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")
Dieses R-Skript generiert die Ausgabe, die im folgenden Screenshot gezeigt wird. Im Grunde Müll.
Ich gehe davon aus, dass es eine Kombination aus HTML, Text und Dateicodierung, die mir in R ein ähnliches Ergebnis zu, dass die Perl-Lösung zu erzeugen, ermöglicht es, aber ich kann es nicht finden. Der Header der HTML-Seite, die ich versuche zu kratzen sagt das Diagrammset ist UTF-8 und ich habe die Codierung in der getURL
Anruf und in der write.table
Funktion auf UTF-8, aber das allein ist nicht genug.
Die Frage Wie kann ich die oben Web-Seite mit R kratzen und den Text als CSV speichere in „wohlgeformt“ japanischen Text und nicht als etwas, das wie Leitungsrauschen aussieht?
Edit: Ich habe einen weiteren Screenshot hinzugefügt, um zu zeigen, was passiert, wenn ich den Encoding
Schritt weglasse. Ich bekomme, was wie Unicode-Codes aussieht, aber nicht die grafische Darstellung der Zeichen. Es kann sich dabei um eine Art von Gebietsschema-Problemen handeln, aber in genau der gleichen Ländereinstellung liefert das Perl-Skript eine nützliche Ausgabe. Das ist also immer noch rätselhaft. Meine Sitzung Info: R Version 2.15.0 gepatchten (2012-05-24 r59442) Plattform: i386-pc-mingw32/i386 (32-Bit) locale: 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 Königreich.1252
angebracht Basispakete: 1 Statistiken Grafiken grDevices utils Datensätze Methoden Basis
vielleicht brauchen Sie nicht 'Encoding (txt) <-" Bytes "' und es funktioniert gut in meiner Umgebung. – kohske
@kohske, danke für diesen Vorschlag. Ich hatte einen anderen Versuch ohne 'Encoding()'; leider war ich erfolglos. – SlowLearner