Come raschiare Reddit con Python

Come fare, Pitone, Scraping, Nov-15-20225 minuti di lettura

Le persone possono facilmente raccogliere e raschiare informazioni da diverse fonti come Facebook, Reddit e Twitter. Si può pensare a uno scraper come a uno strumento specializzato che estrae dati da una pagina web in modo accurato e veloce. Le API di scraping aiutano gli scraper a evitare di essere banditi dalle tecniche anti-scraping adottate dai siti web. Tuttavia, è

Indice dei contenuti

Le persone possono facilmente raccogliere e raschiare informazioni da diverse fonti come Facebook, Reddit e Twitter. Si può pensare a uno scraper come a uno strumento specializzato che estrae dati da una pagina web in modo accurato e veloce. Le API di scraping aiutano gli scraper a evitare di essere banditi dalle tecniche anti-scraping adottate dai siti web. Tuttavia, è costoso utilizzare le API rispetto a uno strumento proxy gestito in proprio.

Avete mai usato Reddit? Se siete ricercatori sociali e passate molto tempo online, è probabile che abbiate sentito parlare di Reddit. Reddit si definisce la "prima pagina di Internet". È un forum di discussione online dove le persone condividono contenuti e notizie o commentano i post degli altri. Si tratta quindi di un'incredibile fonte di dati per i marketer di Internet e i ricercatori sociali. 

Reddit dispone di un'API chiamata Python Reddit API Wrapper, abbreviata in PRAW, per effettuare lo scraping dei dati. In questo blog, vi mostrerò i passaggi per effettuare lo scrape di Reddit utilizzando Python. Ma prima di questo, è necessario sapere perché si deve fare lo scrape di Reddit.

Perché è necessario effettuare lo scraping di Reddit?

Se parliamo del design di Reddit, allora è suddiviso in diverse comunità note come "subreddit". È possibile trovare su Internet qualsiasi sottoreddit relativo all'argomento di interesse. I ricercatori sociali eseguono analisi, fanno inferenze e attuano piani d'azione quando estraggono le discussioni su Reddit per un particolare argomento. 

È possibile raccogliere molti dati da Reddit, ad esempio:

  • Collegamenti
  • Commenti
  • Immagini
  • Elenco dei subreddit
  • Contributi per ogni subreddit
  • Nomi utente
  • Voti in su
  • Voti bassi

È possibile effettuare lo scraping di qualsiasi informazione da Reddit che sia rilevante per la propria attività, grazie alle seguenti esigenze:

  • Per costruire applicazioni NLP
  • Tracciare il sentimento dei clienti
  • Per rimanere al passo con le tendenze del mercato
  • Per la ricerca sui consumatori
  • Per monitorare l'impatto delle vostre campagne di marketing

Per esempio, 

  • Un marchio di moda ha bisogno di analizzare tutti i testi dei commenti, i titoli, i link, le immagini e le didascalie dei subreddit di moda per: Elaborare la giusta strategia di prezzoIdentificare le tendenze del coloreScoprire i punti dolenti degli appassionati di moda con i vari brand
  • Elaborare la giusta strategia di prezzo
  • Identificare le tendenze del colore
  • Scoprire i punti dolenti delle appassionate di moda con i vari marchi
  • Gli operatori del giornalismo e dell'informazione devono scrapolare i post degli autori con i link dei blog per addestrare gli algoritmi di apprendimento automatico per la sintesi automatica dei testi.
  • Le società di investimento e di trading devono spulciare i subreddit relativi al "mercato azionario" per elaborare un piano di investimento interpretando i titoli di cui si parla.

Le sfide dello scraping di Reddit

Lo scraping di Reddit utilizza web scrapers (programmi per computer) per estrarre i dati pubblicamente disponibili dal sito web di Reddit. È necessario utilizzare gli scraper di Reddit a causa delle limitazioni che si incontrano quando si utilizza l'API ufficiale di Reddit. Tuttavia, se si utilizza uno scraper web che non utilizza l'API di Reddit per estrarre dati da Reddit, si violano i termini di utilizzo di Reddit. Ma questo non significa che il web scraping sia illegale.

Per avere una sessione di scraping senza intoppi, dovrete eludere i sistemi anti-scraping messi in atto da Reddit. Le tecniche di anti-scraping più comuni utilizzate da Reddit sono:

  • Tracciamento IP
  • Captchas

È possibile risolvere il problema del tracciamento degli IP con l'aiuto dei proxy e della rotazione degli IP. D'altro canto, è possibile risolvere il problema dei Captcha utilizzando soluzioni Captcha come 2Captcha.

Come raschiare Reddit con Python

Esistono cinque modi per effettuare lo scraping di Reddit e sono:

  • Scraping manuale - È il metodo più semplice ma meno efficiente in termini di velocità e costi. Tuttavia, produce dati con un'elevata coerenza.
  • Utilizzo dell'API di Reddit - Per effettuare lo scrape di Reddit utilizzando l'API di Reddit sono necessarie competenze di base di codifica. Fornisce i dati, ma limita a 1000 il numero di post in ogni thread di Reddit.
  • API di terze parti rivestite di zucchero - È un approccio efficace e scalabile, ma non è efficiente dal punto di vista dei costi.
  • Strumenti di web scraping - Questi strumenti sono scalabili e richiedono solo una conoscenza di base dell'uso del mouse.
  • Script di scraping personalizzati - Sono altamente personalizzabili e scalabili, ma richiedono un elevato livello di programmazione.

Vediamo come effettuare lo scrape di Reddit utilizzando l'API di Reddit con l'aiuto dei seguenti passaggi.

Creare un account API Reddit

Prima di procedere è necessario creare un account Reddit. Per utilizzare PRAW, è necessario registrarsi all'API di Reddit seguendo questo link.

Importazione di pacchetti e moduli

Per prima cosa, importeremo i moduli integrati di Pandas, cioè datetime, e due moduli di terze parti, PRAW e Pandas, come mostrato di seguito:

importare praw
importare pandas come pd
importare datetime come dt

Ottenere istanze Reddit e subreddit

È possibile accedere ai dati di Reddit utilizzando Praw, acronimo di Python Reddit API Wrapper. Per prima cosa, è necessario collegarsi a Reddit chiamando la funzione praw.Reddit e memorizzandola in una variabile. Successivamente, è necessario passare i seguenti argomenti alla funzione.

reddit = praw.Reddit(client_id='PERSONAL_USE_SCRIPT_14_CHARS', \
                    client_secret='SECRET_KEY_27_CHARS', \
                    user_agent='YOUR_APP_NAME', \
                    username='YOUR_REDDIT_USER_NAME', \
                    password='TUA_REDDIT_LOGIN_PASSWORD')

Ora è possibile ottenere il subreddit di propria scelta. Richiamare l'istanza .subreddit da reddit (variabile) e passare il nome del subreddit a cui si vuole accedere. Per esempio, si può usare il subreddit r/Nootropics.

subreddit = reddit.subreddit('Nootropics')

Accesso ai fili

Ogni subreddit ha i seguenti cinque modi diversi per organizzare gli argomenti creati dai Redditor:

  • .nuovo
  • .caldo
  • .controverso
  • .dorato
  • .top

È possibile cogliere gli argomenti più votati come:

top_subreddit = subreddit.top()

Si otterrà un oggetto simile a un elenco che contiene i primi 100 contributi in r/Nootropics. Tuttavia, il limite di richiesta di Reddit è 1000, quindi si può controllare la dimensione del campione passando un limite a .top as:

top_subreddit = subreddit.top(limit=600)

Analizzare e scaricare i dati

È possibile effettuare lo scraping di tutti i dati desiderati. Tuttavia, noi scruteremo le informazioni di seguito riportate sugli argomenti:

  • id
  • titolo
  • punteggio
  • data di creazione
  • testo del corpo

Per farlo, memorizziamo i dati in un dizionario e utilizziamo un ciclo for, come mostrato di seguito.

topics_dict = { "title":[], \
                "score":[], \
                "id":[], "url":[], \
                "created": [], \
                "body":[]}

Ora, possiamo effettuare lo scraping dei dati dall'API di Reddit. Aggiungeremo le informazioni al nostro dizionario iterando l'oggetto top_subreddit.

per submission in top_subreddit:
    topics_dict["id"].append(submission.id)
    topics_dict["title"].append(submission.title)
    topics_dict["score"].append(submission.score)
    topics_dict["created"].append(submission.created)
    topics_dict["body"].append(submission.selftext)

Ora mettiamo i nostri dati in Dataframes di Pandas, poiché i dizionari di Python non sono facili da leggere.

topics_data = pd.DataFrame(topics_dict)

Esportazione CSV

È molto facile creare file di dati in vari formati in Pandas, quindi utilizziamo le seguenti righe di codice per esportare i nostri dati in un file CSV.

topics_data.to_csv('FILENAME.csv', index=False)

I migliori proxy Reddit del 2021

Sapete che Reddit non è un sito molto severo quando si tratta di restrizioni sull'uso dei proxy. Ma potete essere scoperti e penalizzati se automatizzate le vostre azioni su Reddit senza usare proxy. 

Vediamo quindi alcuni dei migliori proxy per Reddit che rientrano in due categorie:

Proxy residenziali - Sono gli indirizzi IP che il provider di servizi Internet (ISP) assegna a un dispositivo in una particolare posizione fisica. Questi proxy rivelano la posizione effettiva del dispositivo che l'utente utilizza per accedere a un sito web.

Proxy del Datacenter - Si tratta di vari indirizzi IP che non provengono da alcun Internet Service Provider. Li acquisiamo da un fornitore di servizi cloud.

Di seguito sono riportati alcuni dei migliori proxy residenziali e per datacenter per Reddit.

Smartproxy

Smartproxy è uno dei migliori fornitori di proxy residenziali premium, in quanto è efficace per l'automazione di Reddit. Dispone di un ampio pool di IP e fornisce l'accesso a tutti gli IP una volta abbonati al suo servizio. 

Stormproxy

I prezzi e la larghezza di banda illimitata di Stormproxies ne fanno una buona scelta. Sono convenienti ed economici da usare. Dispongono di proxy per vari casi d'uso e forniscono i migliori proxy residenziali per l'automazione di Reddit.

ProxyScrape

ProxyScrape è uno dei famosi fornitori di servizi proxy che si concentra sull'offerta di proxy per lo scraping. Offre anche proxy per datacenter dedicati e proxy per datacenter condivisi. Dispone di oltre 40.000 proxy datacenter che è possibile utilizzare per raschiare i dati dai siti web su Internet.

ProxyScrape Fornisce tre tipi di servizi ai suoi utenti, ossia, 

Altiproxies

Highproxies lavora con Reddit e dispone delle seguenti categorie di proxy:

  • Proxy condivisi
  • Proxy privati
  • Siti classificati proxy
  • Proxy di biglietteria
  • Proxy multimediali

Instantproxies

Potete anche utilizzare Instantproxies per l'automazione di Reddit, poiché sono molto sicuri, affidabili, veloci e hanno un uptime di circa il 99,9%. Sono i più economici tra tutti i proxy per datacenter.

Perché usare i proxy Reddit?

Avete bisogno di proxy quando lavorate con alcuni strumenti automatici su Reddit. Reddit è infatti un sito web molto sensibile che rileva facilmente le azioni automatiche e blocca il vostro IP dall'accesso alla piattaforma. Quindi, se state automatizzando alcune attività come i voti, i post, l'unione/disunione di gruppi e la gestione di più di un account, dovete assolutamente usare i proxy per evitare risultati negativi.

Soluzioni alternative a Scrape Reddit

Si può optare per lo scraping manuale se le esigenze di scraping di Reddit sono piccole. Ma se i requisiti diventano grandi, è necessario ricorrere a metodologie di scraping automatizzate come strumenti di scraping web e script personalizzati. Gli strumenti di web scraping si rivelano efficienti in termini di costi e di risorse quando i requisiti di scraping giornaliero sono di pochi milioni di post.

Vediamo quindi alcuni dei migliori Reddit scrapers come soluzione migliore per raschiare grandi quantità di dati Reddit.

Scrapestrom

Scrapestorm è uno dei migliori strumenti di scraping disponibili sul mercato, in quanto funziona molto bene quando si tratta di scraping di Reddit. Utilizza l'intelligenza artificiale per identificare automaticamente i punti chiave della pagina web.

Reddit Scraper di Apify

Il Reddit scraper di Apify consente di estrarre facilmente i dati senza utilizzare l'API di Reddit. Ciò significa che non è necessario un token API per sviluppatori e l'autorizzazione di Reddit per scaricare i dati per uso commerciale. È inoltre possibile ottimizzare lo scraping utilizzando il servizio proxy integrato nella piattaforma Apify. 

Conclusione

Abbiamo discusso di cinque modi per scrapare i dati di Reddit e il più semplice è quello di utilizzare l'API di Reddit perché richiede solo competenze di base di codifica. PRAW è un wrapper Python per l'API di Reddit che consente di utilizzare l'API di Reddit con un'interfaccia Python pulita. Ma quando si hanno grandi esigenze di scraping di Reddit, è possibile estrarre i dati disponibili pubblicamente dal sito web di Reddit con l'aiuto di Reddit scrapers. Per automatizzare le azioni sul sito Reddit, è necessario utilizzare un centro dati o dei proxy residenziali.