2012-06-17 6 views
15

के साथ स्क्रैप किए गए वेब पेज से "साफ" यूटीएफ -8 टेक्स्ट निकालने, आर का उपयोग करके, मैं एक वेब पेज को टेक्स्ट में सहेजने की कोशिश कर रहा हूं, जो जापानी में है, फाइल में। आखिरकार इसे सैकड़ों पृष्ठों से निपटने के लिए दैनिक आधार पर स्केल किया जाना चाहिए। मेरे पास पर्ल में पहले से ही एक व्यावहारिक समाधान है, लेकिन मैं कई भाषाओं के बीच स्विचिंग के संज्ञानात्मक भार को कम करने के लिए स्क्रिप्ट को आर में माइग्रेट करने का प्रयास कर रहा हूं। अब तक मैं सफल नहीं हूं। संबंधित प्रश्न 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.आर: RCurl

पृष्ठ याहू से हैं! जापान वित्त और मेरा पर्ल कोड जो इस तरह दिखता है। इस तरह के रूप में,

CSV file produced by Perl script

मेरे आर कोड:

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; 
} 

यह पर्ल स्क्रिप्ट एक CSV फ़ाइल को नीचे स्क्रीनशॉट की तरह दिखता है, उचित कांजी और काना के साथ कि खनन और चालाकी से ऑफ़लाइन किया जा सकता है का उत्पादन है, निम्नलिखित की तरह दिखता है। आर स्क्रिप्ट सिर्फ पर्ल समाधान का सटीक डुप्लिकेट नहीं है, क्योंकि यह HTML को नहीं हटाता है और टेक्स्ट छोड़ देता है (this answer आर का उपयोग करके एक दृष्टिकोण सुझाता है लेकिन यह इस मामले में मेरे लिए काम नहीं करता है) और यह नहीं करता लूप और इतने पर नहीं है, लेकिन इरादा वही है।

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") 

यह आर स्क्रिप्ट नीचे दिए गए स्क्रीनशॉट में दिखाए गए आउटपुट को उत्पन्न करता है। मूल रूप से बकवास।

CSV file produced by R script

मुझे लगता है कि मुझे आर में पर्ल समाधान की है कि एक समान परिणाम उत्पन्न करने के लिए अनुमति देगा एचटीएमएल, पाठ और फ़ाइल एन्कोडिंग के कुछ संयोजन है कि वहाँ लेकिन मैं यह नहीं मिल सकता है। HTML पृष्ठ का शीर्षलेख जिसे मैं स्क्रैप करने का प्रयास कर रहा हूं, कहता है कि चार्टसेट utf-8 है और मैंने getURL कॉल में और write.table फ़ंक्शन में utf-8 में एन्कोडिंग सेट की है, लेकिन यह अकेला नहीं है।

सवाल कैसे मैं ऊपर वेब पेज आर का उपयोग कर स्क्रैप और "अच्छी तरह से गठित" जापानी के बजाय पाठ कुछ है कि लाइन शोर की तरह लग रहा में सीएसवी के रूप में पाठ को बचा सकता है?

संपादित करें: मैंने यह दिखाने के लिए एक और स्क्रीनशॉट जोड़ा है कि जब मैं Encoding चरण छोड़ देता हूं तो क्या होता है। मुझे यूनिकोड कोड की तरह दिखता है, लेकिन वर्णों का ग्राफिकल प्रतिनिधित्व नहीं। यह किसी प्रकार का लोकेल से संबंधित मुद्दा हो सकता है, लेकिन उसी लोकेल में पर्ल स्क्रिप्ट उपयोगी आउटपुट प्रदान करती है। तो यह अभी भी परेशान है। मेरे सत्र जानकारी: आर संस्करण 2.15.0 समझौता (2012-05-24 r59442) प्लेटफार्म: i386-पीसी-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 = सी
5 LC_TIME = English_United किंगडम।1252
संलग्न आधार संकुल: 1 आँकड़े ग्राफिक्स grDevices utils डेटासेट तरीकों आधार

enter image description here

+0

शायद आपको 'एन्कोडिंग (txt) <- "बाइट्स" की आवश्यकता नहीं है और यह मेरे पर्यावरण में अच्छी तरह से काम करता है। – kohske

+0

@kohske, इस सुझाव के लिए धन्यवाद। मेरे पास 'एन्कोडिंग() 'के बिना एक और प्रयास था; दुर्भाग्य से मैं असफल रहा। – SlowLearner

उत्तर

10

मैं एक जवाब मिल गया है लगता है और किसी और अभी तक एक पोस्ट किया गया है, इसलिए यहाँ जाता है।

इससे पहले @ कोहस्के ने टिप्पणी की थी कि Encoding() कॉल को हटा दिए जाने के बाद कोड उसके लिए काम करता था। इससे मुझे यह सोचने लगा कि उसके पास शायद एक जापानी लोकेल है, जिसने बदले में कहा कि मेरी मशीन पर एक लोकेल मुद्दा था जो किसी भी तरह से आर को प्रभावित करता है - भले ही पर्ल समस्या से बचा जाए। मैंने अपनी खोज को दोबारा शुरू किया और this question को एक यूटीएफ -8 फ़ाइल सोर्सिंग पर पाया जिसमें मूल पोस्टर एक ही समस्या में चला गया था। जवाब लोकेल स्विचिंग शामिल है। मैं प्रयोग किया और पाया कि जापानी करने के लिए अपने स्थान स्विचन समस्या को हल करने लगता है, के रूप में इस स्क्रीनशॉट दिखाता है:

Output from updated R code

अपडेट किया गया आर कोड इस प्रकार है।

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" 

print(Sys.getlocale(category = "LC_CTYPE")) 
original_ctype <- Sys.getlocale(category = "LC_CTYPE") 
Sys.setlocale("LC_CTYPE","japanese") 

txt <- getURL(links, .encoding = "UTF-8") 

write.table(txt, "c:/geturl_r.txt", quote = FALSE, row.names = FALSE, sep = "\t", fileEncoding = "UTF-8") 
Sys.setlocale("LC_CTYPE", original_ctype) 

तो हमें स्थानीय स्तर पर प्रोग्रामेटिक रूप से गड़बड़ करना है। स्पष्ट रूप से मैं थोड़ा शर्मिंदा हूं कि हमें स्पष्ट रूप से वर्ष 2012 में विंडोज़ पर आर के लिए इस तरह की कड़वाहट की आवश्यकता है। जैसा कि मैंने ऊपर बताया है, विंडोज के उसी संस्करण पर पर्ल और उसी लोकेल में किसी भी तरह से इस मुद्दे को हल किया जाता है, मुझे बिना किसी आवश्यकता के मेरी सिस्टम सेटिंग्स बदलें।

ऊपर अपडेट किए गए आर कोड का आउटपुट एचटीएमएल है। रुचि रखने वालों के लिए, निम्नलिखित कोड HTML को अलग करने और कच्चे पाठ को सहेजने में काफी अच्छी तरह से सफल होता है, हालांकि परिणाम को बहुत सी चीजों की आवश्यकता होती है।

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" 

print(Sys.getlocale(category = "LC_CTYPE")) 
original_ctype <- Sys.getlocale(category = "LC_CTYPE") 
Sys.setlocale("LC_CTYPE","japanese") 

txt <- getURL(links, .encoding = "UTF-8") 
myhtml <- htmlTreeParse(txt, useInternal = TRUE) 
cleantxt <- xpathApply(myhtml, "//body//text()[not(ancestor::script)][not(ancestor::style)][not(ancestor::noscript)]", xmlValue) 

write.table(cleantxt, "c:/geturl_r.txt", col.names = FALSE, quote = FALSE, row.names = FALSE, sep = "\t", fileEncoding = "UTF-8") 
Sys.setlocale("LC_CTYPE", original_ctype) 
0

हाय मैं एक स्क्रैप इंजन है कि वेब पृष्ठों पर डेटा के scraping कि गहराई से मुख्य सूची पृष्ठ के भीतर एम्बेडेड रहे हैं के लिए अनुमति देता है लिखा है। मुझे आश्चर्य है कि आर में आयात करने से पहले अपने वेब डेटा के लिए इसे एग्रीगेटर के रूप में उपयोग करना उपयोगी हो सकता है?

इंजन के लिए स्थान नमूना पैरामीटर मैं पेज आपने सोचा था स्क्रैप करने के लिए बनाया के रूप में नीचे है यहाँ http://ec2-204-236-207-28.compute-1.amazonaws.com/scrap-gm

है।

{ 
    origin_url: 'http://stocks.finance.yahoo.co.jp/stocks/detail/?code=7203', 
    columns: [ 
    { 
     col_name: 'links_name', 
     dom_query: 'a' 
    }, { 
     col_name: 'links', 
     dom_query: 'a' , 
     required_attribute: 'href' 
    }] 
};