2015-11-24 6 views
6

मेरे पास 2014-11-01 और 2015-10-31 के बीच बिटकॉइन सब्रेडडिट में सभी पोस्ट को स्क्रैप करने के लिए एक फ़ंक्शन है।किसी दिए गए समयावधि में सभी subreddit पदों को कैसे स्क्रैप करें

हालांकि, मैं केवल 9 0 9 पदों को निकालने में सक्षम हूं जो केवल 25 अक्टूबर को वापस आते हैं। मुझे समझ में नहीं आता कि क्या हो रहा है। मैंने https://github.com/reddit/reddit/wiki/API का जिक्र करने के बाद प्रत्येक निकालने के बीच 15 सेकंड का Sys.sleep शामिल किया, इसका कोई फायदा नहीं हुआ।

इसके अलावा, मैंने एक और subreddit (फिटनेस) से स्क्रैपिंग के साथ प्रयोग किया, लेकिन यह लगभग 900 पदों को वापस कर दिया।

require(jsonlite) 
require(dplyr) 

getAllPosts <- function() { 
    url <- "https://www.reddit.com/r/bitcoin/search.json?q=timestamp%3A1414800000..1446335999&sort=new&restrict_sr=on&rank=title&syntax=cloudsearch&limit=100" 
    extract <- fromJSON(url) 
    posts <- extract$data$children$data %>% dplyr::select(name, author, num_comments, created_utc, 
              title, selftext) 
    after <- posts[nrow(posts),1] 
    url.next <- paste0("https://www.reddit.com/r/bitcoin/search.json?q=timestamp%3A1414800000..1446335999&sort=new&restrict_sr=on&rank=title&syntax=cloudsearch&after=",after,"&limit=100") 
    extract.next <- fromJSON(url.next) 
    posts.next <- extract.next$data$children$data 

    # execute while loop as long as there are any rows in the data frame 
    while (!is.null(nrow(posts.next))) { 
     posts.next <- posts.next %>% dplyr::select(name, author, num_comments, created_utc, 
            title, selftext) 
     posts <- rbind(posts, posts.next) 
     after <- posts[nrow(posts),1] 
     url.next <- paste0("https://www.reddit.com/r/bitcoin/search.json?q=timestamp%3A1414800000..1446335999&sort=new&restrict_sr=on&rank=title&syntax=cloudsearch&after=",after,"&limit=100") 
     Sys.sleep(15) 
     extract <- fromJSON(url.next) 
     posts.next <- extract$data$children$data 
    } 
    posts$created_utc <- as.POSIXct(posts$created_utc, origin="1970-01-01") 
    return(posts) 
} 

posts <- getAllPosts() 

क्या रेडडिट में कुछ प्रकार की सीमा है जो मैं मार रहा हूं?

उत्तर

4

हां, सभी reddit लिस्टिंग (पोस्ट, टिप्पणियां, आदि) 1000 आइटम पर capped हैं; प्रदर्शन कारणों से, वे अनिवार्य रूप से केवल कैश किए गए सूचियां हैं, प्रश्नों के बजाय।

इसके आसपास पाने के लिए, आपको कुछ चालाक खोज based on timestamps करने की आवश्यकता होगी।

+1

यदि मैं एक ऐसा फ़ंक्शन लिखता हूं जिसमें लूप होता है जहां प्रत्येक पुनरावृत्ति 4 दिनों के डेटा को कैप्चर करता है, तो क्या वह Reddit के प्रतिबंधों को बाईपास करेगा? दूसरे शब्दों में, क्या मैं इस फ़ंक्शन को चलाने और पूरे वर्ष के लिए पोस्ट प्राप्त करने में सक्षम हूं? –

+1

इस बात पर निर्भर करता है कि आपको लगता है कि यह उन 4 दिनों में 1000 पदों की संभावना है। यह संभवतः नए द्वारा क्रमबद्ध करना आसान होगा और अंतिम पोस्ट के टाइमस्टैम्प का उपयोग कर सकते हैं जिसे आप एक्सेस कर सकते हैं। – Pokechu22

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