2010-07-07 12 views
19

क्या आर में एक HTML पृष्ठ के केवल पाठ तत्व निकालने का कोई आसान तरीका है?क्या एचटीएमएल पेज के टेक्स्ट तत्वों को निकालने के लिए आर में कोई आसान तरीका है?

मुझे लगता है कि इसे 'स्क्रीन स्क्रैपिंग' के रूप में जाना जाता है लेकिन मुझे इसका कोई अनुभव नहीं है, मुझे केवल उस पाठ को निकालने का एक आसान तरीका चाहिए जिसे आप आमतौर पर ब्राउज़र में यूआरएल पर जाते समय देखते हैं।

+3

डुप्लिकेट: http://stackoverflow.com/questions/1844829/how-can-i-read-and-parse-the-contents-of-a-webpage-in-r – Shane

+1

@Shane - दिया गया उत्तर उस पृष्ठ पर काम नहीं लग रहा है (कम से कम अब और नहीं, हालांकि मुझे यकीन है कि यह उस समय हुआ था)। – JoshuaCrove

+0

फिर हमें इसे ठीक करना चाहिए, एक नया शुरू नहीं करना चाहिए। या फिर एक सवाल पूछें कि कैसे पुराना उत्तर अब काम नहीं करता है। – Shane

उत्तर

18

मैं अपने आप को समय की बात है एक बार ऐसा करने के लिए किया था।

ऐसा करने का एक तरीका XPath अभिव्यक्तियों का उपयोग करना है। आप ब्याज की वेबसाइट से कनेक्ट करने में http://www.omegahat.org/

library(RCurl) 
library(RTidyHTML) 
library(XML) 

हम RCurl का उपयोग इन पैकेजों रिपोजिटरी से स्थापित की आवश्यकता होगी। इसमें बहुत सारे विकल्प हैं जो आपको वेबसाइटों तक पहुंचने की अनुमति देते हैं कि बेस आर में डिफ़ॉल्ट कार्यों में मुझे लगता है कि यह कहना उचित है। यह libcurl पुस्तकालय के लिए एक आर इंटरफ़ेस है।

हम विकृत एचटीएमएल वेब पेजों को साफ करने के लिए आरटीआईडीएचटीएमएल का उपयोग करते हैं ताकि वे पार्स करना आसान हो। यह libtidy पुस्तकालय के लिए एक आर इंटरफ़ेस है।

हम अपने XPath अभिव्यक्तियों के साथ HTML कोड को पार्स करने के लिए XML का उपयोग करते हैं। यह libxml2 लाइब्रेरी के लिए एक आर-इंटरफ़ेस है।

फिर भी, यहाँ आप क्या करना है (कम से कम कोड है, लेकिन विकल्प उपलब्ध हैं, इसी कार्यों की सहायता पृष्ठ देखें):

u <- "http://stackoverflow.com/questions/tagged?tagnames=r" 
doc.raw <- getURL(u) 
doc <- tidyHTML(doc.raw) 
html <- htmlTreeParse(doc, useInternal = TRUE) 
txt <- xpathApply(html, "//body//text()[not(ancestor::script)][not(ancestor::style)][not(ancestor::noscript)]", xmlValue) 
cat(unlist(txt)) 

वहाँ इस दृष्टिकोण के साथ कुछ समस्या हो सकता है लेकिन मुझे याद नहीं क्या वे मेरे सिर के शीर्ष से बाहर हैं (मुझे नहीं लगता कि मेरी xpath अभिव्यक्ति सभी वेब पृष्ठों के साथ काम करती है, कभी-कभी यह स्क्रिप्ट कोड को फ़िल्टर नहीं कर सकती है या यह केवल कुछ अन्य पृष्ठों के साथ काम नहीं कर सकती है, प्रयोग करने के लिए सबसे अच्छा!)

पीएस एक और तरीका है, जो वेब पर लगभग पूरी तरह से मुझे लगता है कि काम करता है एचटीएमएल से सभी पाठ scraping निम्नलिखित (मूल रूप से आप के लिए रूपांतरण करने के लिए इंटरनेट एक्सप्लोरर हो रही) है:

library(RDCOMClient) 
u <- "http://stackoverflow.com/questions/tagged?tagnames=r" 
ie <- COMCreate("InternetExplorer.Application") 
ie$Navigate(u) 
txt <- list() 
txt[[u]] <- ie[["document"]][["body"]][["innerText"]] 
ie$Quit() 
print(txt) 

हालांकि, मैं इसलिए नहीं कि यह कर अच्छा लगा कभी नहीं किया है केवल यह धीमा है, लेकिन यदि आप इसे सदिश बनाते हैं और यूआरएल का वेक्टर लागू करते हैं, यदि इंटरनेट एक्सप्लोरर खराब पृष्ठ पर दुर्घटनाग्रस्त हो जाता है, तो आर खुद को लटका सकता है या दुर्घटनाग्रस्त हो सकता है (मुझे नहीं लगता? इस मामले में बहुत मदद करने की कोशिश करें)। इसके अलावा पॉप-अप की अनुमति देने की संभावना है। मुझे नहीं पता, यह थोड़ी देर हो गया है क्योंकि मैंने यह किया है, लेकिन सोचा कि मुझे इसे इंगित करना चाहिए।

+0

http: // stackoverflow.com/questions/31423931/extract-data-from-raw-html-in-r –

2

वैसे यह वास्तव में ऐसा करने का एक आर तरीका नहीं है, लेकिन यह उतना आसान है जितना वे आते हैं: फ़ायरफ़ॉक्स के लिए प्लगइन से बाहर निकलें। मूल संस्करण मुफ्त में है और तालिकाओं और सामान निकालने में मदद करता है।

आह और यदि आप वास्तव में इसे आर में मुश्किल तरीके से करना चाहते हैं, इस link आप के लिए है:

2

मुझे XML पैकेज के readHTMLTable() फ़ंक्शन के साथ शुभकामनाएं मिली हैं। यह पृष्ठ पर सभी तालिकाओं की एक सूची देता है।

> library(XML) 
> url <- 'http://en.wikipedia.org/wiki/World_population' 
> allTables <- readHTMLTable(url) 

प्रत्येक पृष्ठ पर कई टेबल हो सकते हैं।

> length(allTables) 
[1] 17 

तो बस अपनी इच्छित व्यक्ति का चयन करें।

> tbl <- allTables[[3]] 

सबसे बड़ी परेशानी एक्सएमएल पैकेज स्थापित कर सकती है। यह बड़ा है, और इसे libxml2 लाइब्रेरी की आवश्यकता है (और, लिनक्स के तहत, इसे xml2-config डेबियन पैकेज भी चाहिए)। दूसरी सबसे बड़ी परेशानी यह है कि एचटीएमएल टेबल में अक्सर जंक होता है जिसे आप नहीं चाहते हैं, जो डेटा आप चाहते हैं उसके अलावा।

संबंधित मुद्दे

 संबंधित मुद्दे