donker proxyscrape logo

Hoe Reddit scrapen met Python

Hoe doe je dat?, Python, Schrapen, 02-02-20225 min gelezen

Inhoudsopgave

Mensen kunnen gemakkelijk informatie verzamelen en scrapen van verschillende bronnen, zoals Facebook, Reddit en Twitter. Je kunt een scraper zien als een gespecialiseerd hulpmiddel dat nauwkeurig en snel gegevens van een webpagina haalt. De scraping API's helpen de scrapers om niet gebanned te worden door anti-scraping technieken die de websites plaatsen. Het is echter duur om API's te gebruiken in vergelijking met een proxy tool die je zelf beheert.

Heb je Reddit al gebruikt? Als je een sociaal onderzoeker bent en veel tijd online doorbrengt, is de kans groot dat je wel eens van Reddit hebt gehoord. Reddit noemt zichzelf de "voorpagina van het internet". Het is een online discussieforum waar mensen inhoud en nieuws delen of commentaar geven op berichten van anderen. Het is dus een ongelooflijke bron van gegevens voor internetmarketeers en sociale onderzoekers. 

Reddit heeft een API genaamd de Python Reddit API Wrapper, afgekort PRAW, om gegevens te crawlen. In deze blog laat ik je zien hoe je Reddit kunt scrapen met Python. Maar eerst moet je weten waarom je Reddit moet scrapen.

Waarom moet je Reddit scrapen?

Als we het hebben over het ontwerp van Reddit, dan is het onderverdeeld in verschillende gemeenschappen die bekend staan als "subreddits". Je kunt op het internet elke subreddit vinden voor het onderwerp dat je interesseert. Sociale onderzoekers voeren analyses uit, trekken conclusies en implementeren actieplannen wanneer ze Reddit-discussies voor een bepaald onderwerp extraheren. 

Je kunt veel datapunten van Reddit scrapen, zoals:

  • Links
  • Reacties
  • Afbeeldingen
  • Lijst van subreddits
  • Inzendingen voor elke subreddit
  • Gebruikersnamen
  • Upvotes
  • Downvotes

Je kunt alle informatie van Reddit scrapen die relevant is voor jouw bedrijf vanwege de volgende behoeften:

  • NLP-toepassingen bouwen
  • Het gevoel van de klant volgen
  • Op de hoogte blijven van markttrends
  • Voor consumentenonderzoek
  • De impact van je marketingcampagnes monitoren

Bijvoorbeeld, 

  • Een modemerk moet alle commentaarteksten, titels, links, afbeeldingen en bijschriften in modesubreddits scrapen voor:
    • De juiste prijsstrategie bedenken
    • Kleurentrends herkennen
    • Ontdek de pijnpunten van fashionista's bij verschillende merken
  • Journalisten en nieuwsspecialisten moeten berichten van auteurs met bloglinks scrapen om algoritmen voor machinaal leren te trainen voor automatische tekstsamenvattingen.
  • Beleggings- en handelsfirma's moeten "beursgerelateerde" subreddits afstruinen om een beleggingsplan op te stellen door te interpreteren welke aandelen worden besproken.

Uitdagingen van het scrapen van Reddit

Reddit scraping maakt gebruik van web scrapers (computerprogramma's) om publiek beschikbare gegevens van de Reddit website te halen. Je moet de Reddit scrapers gebruiken vanwege de beperkingen waarmee je te maken krijgt als je de officiële Reddit API gebruikt. Als je echter een webscraper gebruikt die geen gebruik maakt van de Reddit API om gegevens van Reddit te halen, schend je de gebruiksvoorwaarden van Reddit. Dit betekent echter niet dat web scraping illegaal is.

Om een probleemloze scraping-sessie te hebben, moet je de anti-scraping-systemen van Reddit omzeilen. De meest gebruikte anti-scrapingtechnieken van Reddit zijn:

  • IP volgen
  • Captcha's

U kunt het probleem van IP-tracking oplossen met behulp van proxies en IP-rotatie. Aan de andere kant kun je het probleem van Captcha's oplossen met behulp van Captcha-oplossingen zoals 2Captcha.

Hoe Reddit scrapen met Python

Er zijn vijf manieren om Reddit te scrapen:

  • Handmatig schrapen - Dit is de eenvoudigste maar minst efficiënte methode in termen van snelheid en kosten. Het levert echter gegevens op met een hoge consistentie.
  • Reddit API gebruiken - Je hebt basiscoderingsvaardigheden nodig om Reddit te scrapen met Reddit API. Het levert de gegevens, maar beperkt het aantal berichten in een Reddit thread tot 1000.
  • Sugar-Coated API's van derden - Het is een effectieve en schaalbare aanpak, maar het is niet kostenefficiënt.
  • Web Scraping tools - Deze tools zijn schaalbaar en vereisen alleen basiskennis van het gebruik van een muis.
  • Aangepaste scrapscripts - Ze zijn zeer aanpasbaar en schaalbaar, maar vereisen een hoog programmeerkaliber.

Laten we eens kijken hoe we Reddit kunnen scrapen met behulp van de Reddit API met behulp van de volgende stappen.

Reddit API-account aanmaken

Je moet een Reddit-account aanmaken voordat je verder kunt gaan. Om PRAW te gebruiken, moet je je registreren voor de Reddit API door deze link te volgen.

Pakketten en modules importeren

Eerst importeren we de ingebouwde Pandas-modules, zoals datetime, en twee modules van derden, PRAW en Pandas, zoals hieronder getoond:

importeer praw
importeer pandas als pd
importeer datetime als dt

Reddit en subreddit instanties krijgen

Je hebt toegang tot de Reddit-gegevens met Praw, wat staat voor Python Reddit API Wrapper. Eerst moet je verbinding maken met Reddit door de functie praw.Reddit aan te roepen en op te slaan in een variabele. Daarna moet je de volgende argumenten doorgeven aan de functie.

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='YOUR_REDDIT_LOGIN_PASSWORD')
Nu kun je de subreddit van je keuze ophalen. Roep dus de .subreddit-instantie van reddit aan (variabele) en geef de naam door van de subreddit die je wilt openen. Je kunt bijvoorbeeld de subreddit r/Nootropics gebruiken.
subreddit = reddit.subreddit('Nootropics')

Toegang tot de Threads

Elke subreddit heeft de onderstaande vijf verschillende manieren om de onderwerpen te organiseren die door Redditors zijn aangemaakt:

  • .nieuw
  • .heet
  • controversieel
  • .verguld
  • .top

Je kunt de onderwerpen waar het meest over is gestemd als volgt bekijken:

top_subreddit = subreddit.top()

Je krijgt een lijstachtig object met de top 100 inzendingen in r/Nootropics. De aanvraaglimiet van Reddit is echter 1000, dus je kunt de steekproefgrootte regelen door een limiet door te geven aan .top als:

top_subreddit = subreddit.top(limit=600)

De gegevens ontleden en downloaden

Je kunt alle gegevens scrapen die je maar wilt. We zullen echter de onderstaande informatie over de onderwerpen scrapen:

  • id
  • titel
  • score
  • datum van creatie
  • bodytekst

We zullen dit doen door onze gegevens op te slaan in een woordenboek en vervolgens een for-lus te gebruiken zoals hieronder wordt weergegeven.

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

Nu kunnen we de gegevens van de Reddit API scrapen. We voegen de informatie toe aan ons woordenboek door iteratie door ons top_subreddit object.

voor onderwerp 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)

Nu zetten we onze gegevens in Pandas Dataframes omdat Python woordenboeken niet gemakkelijk te lezen zijn.

topics_data = pd.DataFrame(topics_dict)

CSV exporteren

Het is heel eenvoudig om in Pandas gegevensbestanden in verschillende formaten te maken, dus we gebruiken de volgende regels code om onze gegevens naar een CSV-bestand te exporteren.

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

Beste Reddit Proxies van 2021

Je weet dat Reddit niet echt een strenge website is als het gaat om proxy gebruiksbeperkingen. Maar je kunt betrapt en gestraft worden als je je acties op Reddit automatiseert zonder proxies te gebruiken. 

Laten we eens kijken naar de beste proxies voor Reddit die in twee categorieën vallen:

residentiële Proxies - Dit zijn de IP-adressen die de Internet Service Provider (ISP) toewijst aan een apparaat op een bepaalde fysieke locatie. Deze proxies onthullen de werkelijke locatie van het apparaat dat de gebruiker gebruikt om in te loggen op een website.
Datacenter proxies - Dit zijn verschillende IP-adressen die niet afkomstig zijn van een Internet Service Provider. We verkrijgen ze van een cloudserviceprovider.

Hieronder volgen enkele van de top residentiële en datacenter proxies voor Reddit.

Smartproxy

Smartproxy is een van de top premium residentiële proxy providers omdat het effectief is voor Reddit automatisering. Het heeft een uitgebreide IP-pool en biedt toegang tot alle IP's zodra je je abonneert op de service. 

Stormproxy

De prijzen en onbeperkte bandbreedte van Stormproxies maken ze een goede keuze. Ze zijn betaalbaar en goedkoop in gebruik. Ze hebben proxies voor verschillende use cases en bieden de beste residentiële proxies voor Reddit automatisering.

ProxyScrape

ProxyScrape is een van de populaire proxy serviceproviders die zich richt op het aanbieden van proxies voor scraping. Het biedt ook dedicated datacenter proxies samen met het gedeelde datacenter proxies. Het heeft meer dan 40k datacenters proxies die je kunt gebruiken om gegevens van websites op het internet te scrapen.

ProxyScrape biedt drie soorten diensten aan haar gebruikers, namelijk, 

Hoogproxies

Highproxies werken met Reddit en hebben de volgende categorieën proxies:
  • Gedeelde proxies
  • Privé proxies
  • Geclassificeerde sites proxies
  • Ticketing proxies
  • Media proxies

Instantproxies

Je kunt ook Instantproxies gebruiken voor Reddit-automatisering omdat ze erg veilig, betrouwbaar en snel zijn en een uptime van ongeveer 99,9 procent hebben. Ze zijn de goedkoopste van alle datacenters proxies.

Waarom Reddit Proxies gebruiken?

Je hebt proxies nodig als je werkt met een aantal automatische tools op Reddit. Reddit is namelijk een zeer gevoelige website die gemakkelijk automatische acties detecteert en je IP blokkeert voor toegang tot het platform. Dus als je sommige taken automatiseert, zoals stemmen, posten, lid worden van groepen en het beheren van meer dan één account, moet je zeker proxies gebruiken om slechte resultaten te voorkomen.

Alternatieve oplossingen om Reddit te scrapen

U kunt kiezen voor handmatig schrapen als uw Reddit-schraapbehoeften klein zijn. Maar als de vereisten groot worden, moet je geautomatiseerde scraping methodologieën gebruiken zoals web scraping tools en aangepaste scripts. De webscrapers blijken kosten- en middelenefficiënt te zijn als je dagelijkse scrapingvereisten binnen een paar miljoen berichten liggen.

Laten we dus eens kijken naar enkele van de beste Reddit scrapers als de beste oplossing om grote hoeveelheden Reddit gegevens te scrapen.

Schraaprom

Scrapestorm is een van de beste schraaptools op de markt, omdat het geweldig werkt als het gaat om het schrapen van Reddit. Het maakt gebruik van kunstmatige intelligentie om de belangrijkste gegevenspunten op de webpagina automatisch te identificeren.

Apify's Reddit-krabber

Apify's Reddit scraper maakt het gemakkelijk voor je om gegevens te extraheren zonder gebruik te maken van de Reddit API. Dit betekent dat je geen API-token voor ontwikkelaars en toestemming van Reddit nodig hebt om de gegevens te downloaden voor commercieel gebruik. Je kunt je scraping ook optimaliseren door gebruik te maken van de geïntegreerde proxy service van het Apify platform. 

Conclusie

We hebben vijf manieren besproken om Reddit-gegevens te scrapen, en de eenvoudigste manier is het gebruik van de Reddit API, omdat je hiervoor alleen basisvaardigheden op het gebied van codering nodig hebt. PRAW is een Python-wrapper voor de Reddit API waarmee je een Reddit API kunt gebruiken met een schone Python-interface. Maar als je grote Reddit-schraapvereisten hebt, kun je openbaar beschikbare gegevens van de Reddit-website halen met behulp van Reddit-schrapers. Om je acties op de Reddit website te automatiseren, moet je een datacenter of residentiële proxies.