2017-02-07 6 views
5

मैं डेटा को स्क्रैप करने के लिए इस वेबपृष्ठ http://volcano.si.edu/search_eruption.cfm का उपयोग करने का प्रयास कर रहा हूं। दो ड्रॉप-डाउन बॉक्स हैं जो डेटा के फ़िल्टर मांगते हैं। मुझे फ़िल्टर किए गए डेटा की आवश्यकता नहीं है, इसलिए मैं उन रिक्त स्थान को छोड़ देता हूं और "खोज विस्फोट" पर क्लिक करके अगले पृष्ठ पर जारी रहता हूं।वेबपृष्ठ पर एक डाउनलोड फ़ाइल बटन "क्लिक" करने के लिए आर का उपयोग

मैंने जो देखा है, हालांकि, परिणामी तालिका में केवल कॉलम की कुल मात्रा (केवल 24) की तुलना में केवल थोड़ी मात्रा में कॉलम (केवल 5) शामिल हैं। हालांकि, यदि आप "एक्सेल" बटन पर क्लिक करें और डाउनलोड की गई फ़ाइल खोलें तो सभी 24 कॉलम वहां होंगे। मुझे इसकी ही आवश्यकता थी।

तो ऐसा लगता है कि यह एक स्क्रैपिंग अभ्यास (प्रेजेंटर और रेवेस्ट का उपयोग करके) से कुछ और मुश्किल हो गया है। हालांकि, मैं आर 0 का उपयोग कर "एक्सेल" बटन पर वास्तव में "क्लिक" करने के तरीके पर फंस गया हूं। मेरा अनुमान है कि मुझे आरसेलेनियम का उपयोग करना होगा, लेकिन यहां मेरा कोड POST के साथ POST के साथ प्रोजेक्टर का उपयोग करने का प्रयास कर रहा है एक आसान तरीका है कि आप में से कोई भी व्यक्ति मिल सकता है। मैंने gdata, data.table, XML, आदि का उपयोग करने का भी प्रयास नहीं किया है, जो कि उपयोगकर्ता त्रुटि का नतीजा हो सकता है।

इसके अलावा, यह जानना उपयोगी हो सकता है कि डाउनलोड बटन को यूआरएल दिखाने के लिए राइट-क्लिक नहीं किया जा सकता है।

url <- "http://volcano.si.edu/search_eruption_results.cfm" 

searchcriteria <- list(
    eruption_category = "", 
    country = "" 
) 

mydata <- POST(url, body = "searchcriteria") 

अपने ब्राउज़र में इंस्पेक्टर का उपयोग करना, मुझे लगता है कि दो फिल्टर "eruption_category" और "देश" और जब से मैं किसी भी फ़िल्टर किए गए डेटा की जरूरत नहीं है दोनों खाली हो जाएगा देखने के लिए सक्षम था।

आखिरकार, ऐसा लगता है कि उपर्युक्त कोड मुझे उस पृष्ठ पर ले जाएगा जिसमें तालिका केवल 5 कॉलम है। हालांकि, मैं अभी भी नीचे दिए गए कोड में फसल का उपयोग करके इस तालिका को स्क्रैप करने में असमर्थ था (केवल एक कॉलम को स्क्रैप करने के लिए सिलेक्टर गैजेट का उपयोग करके)। अंत में, इस हिस्से से ज्यादा कोई फर्क नहीं पड़ता क्योंकि, जैसा कि मैंने उपरोक्त कहा था, मुझे केवल 24 कॉलम की आवश्यकता नहीं है, लेकिन अगर आपको नीचे जो भी किया गया है, उसके साथ आपको कोई त्रुटि मिलती है, तो मैं आभारी रहूंगा ।

Eruptions <- mydata %>% 
    read_html() %>% 
    html_nodes(".td8") %>% 
    html_text() 
Eruptions 

किसी भी मदद प्रदान कर सकते हैं के लिए धन्यवाद।

+0

यह पेज की तरह दिखता है एक जावास्क्रिप्ट का उपयोग करता रेंडर करने के लिए पृष्ठ। सबसे आसान और तेज़ तरीका सिर्फ एक्सेल फ़ाइल डाउनलोड कर सकता है और उस प्रक्रिया को संसाधित कर सकता है। डेटा स्थिर रूप से स्थैतिक दिखता है, इसलिए कभी-कभी डाउनलोड एक समस्या नहीं होनी चाहिए। – Dave2e

+0

धन्यवाद @ डेव 2e। दुर्भाग्यवश, मुझे ** में ऐसा करने के लिए ** की आवश्यकता है। और जैसा कि आपने कहा था, यह ज्यादातर स्थिर है, लेकिन फिर भी अक्सर पर्याप्त अपडेट किया जाता है। – abet

उत्तर

4

बस की नकल POST यह करता है:

library(httr) 
library(rvest) 
library(purrr) 
library(dplyr) 

POST("http://volcano.si.edu/search_eruption_results.cfm", 
    body = list(bp = "", `eruption_category[]` = "", `country[]` = "", polygon = "", cp = "1"), 
    encode = "form") -> res 

content(res, as="parsed") %>% 
    html_nodes("div.DivTableSearch") %>% 
    html_nodes("div.tr") %>% 
    map(html_children) %>% 
    map(html_text) %>% 
    map(as.list) %>% 
    map_df(setNames, c("volcano_name", "subregion", "eruption_type", 
        "start_date", "max_vei", "X1")) %>% 
    select(-X1) 
## # A tibble: 750 × 5 
## volcano_name   subregion  eruption_type start_date 
##   <chr>    <chr>    <chr>  <chr> 
## 1 Chirinkotan  Kuril Islands Confirmed Eruption 2016 Nov 29 
## 2 Zhupanovsky Kamchatka Peninsula Confirmed Eruption 2016 Nov 20 
## 3  Kerinci    Sumatra Confirmed Eruption 2016 Nov 15 
## 4  Langila   New Britain Confirmed Eruption 2016 Nov 3 
## 5  Cleveland  Aleutian Islands Confirmed Eruption 2016 Oct 24 
## 6   Ebeko  Kuril Islands Confirmed Eruption 2016 Oct 20 
## 7  Ulawun   New Britain Confirmed Eruption 2016 Oct 11 
## 8  Karymsky Kamchatka Peninsula Confirmed Eruption 2016 Oct 5 
## 9  Ubinas     Peru Confirmed Eruption 2016 Oct 2 
## 10  Rinjani Lesser Sunda Islands Confirmed Eruption 2016 Sep 27 
## # ... with 740 more rows, and 1 more variables: max_vei <chr> 

मैं ग्रहण "एक्सेल" भाग निष्कर्ष निकाला जा सकता है, लेकिन नहीं करता है, तो:

POST("http://volcano.si.edu/search_eruption_excel.cfm", 
    body = list(`eruption_category[]` = "", 
       `country[]` = ""), 
    encode = "form", 
    write_disk("eruptions.xls")) -> res 
+0

ग्रेट उत्तर, लेकिन सवाल बताते हैं कि मैन्युअल रूप से डाउनलोड की गई फ़ाइल अधिक पूर्ण है क्योंकि इसमें अधिक कॉलम हैं (5 के बजाय 24)। मैं वास्तव में जानना चाहता हूं कि इसे स्वचालित रूप से डाउनलोड करना और लोड करना संभव होगा – GGamba

+2

इसे जोड़ा गया (मुझे लगता है कि इसे आसानी से निकाला जा सकता था) – hrbrmstr

+0

इस उत्तर के लिए @hrbrmstr धन्यवाद। यह ** बिल्कुल ** ** मुझे क्या चाहिए। – abet

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