ciemne logo proxyscrape

Jak zeskrobać Reddit za pomocą Pythona

Jak to zrobić, Python, Scraping, 02 listopada 2022 r.5 minut czytania

Spis treści

Ludzie mogą łatwo gromadzić i skrobać informacje z wielu źródeł, takich jak Facebook, Reddit i Twitter. O scraperze można myśleć jako o wyspecjalizowanym narzędziu, które dokładnie i szybko wyodrębnia dane ze strony internetowej. Interfejsy API do skrobania pomagają skrobakom uniknąć zbanowania przez techniki anty-skrobania, które umieszczają strony internetowe. Korzystanie z interfejsów API jest jednak kosztowne w porównaniu z narzędziem proxy zarządzanym samodzielnie.

Czy korzystałeś z Reddit? Jeśli jesteś badaczem społecznym i spędzasz dużo czasu online, prawdopodobnie słyszałeś o Reddit. Reddit reklamuje się jako "pierwsza strona Internetu". Jest to internetowe forum dyskusyjne, na którym ludzie dzielą się treściami i wiadomościami lub komentują posty innych osób. Jest to więc niesamowite źródło danych dla marketerów internetowych i badaczy społecznych. 

Reddit ma API o nazwie Python Reddit API Wrapper, w skrócie PRAW, do indeksowania danych. Na tym blogu pokażę ci kroki, jak zeskrobać Reddit za pomocą Pythona. Ale zanim to nastąpi, musisz wiedzieć, dlaczego musisz skrobać Reddit.

Dlaczego warto scrape'ować Reddit?

Jeśli mówimy o projekcie Reddita, to jest on podzielony na kilka społeczności znanych jako "subreddity". W Internecie można znaleźć dowolny subreddit na interesujący nas temat. Badacze społeczni przeprowadzają analizy, wyciągają wnioski i wdrażają plany działania, gdy wyodrębniają dyskusje Reddit na określony temat. 

Z Reddita można pobrać wiele danych, takich jak:

  • Linki
  • Komentarze
  • Obrazy
  • Lista subredditów
  • Zgłoszenia dla każdego subreddita
  • Nazwy użytkowników
  • Głosy za
  • Głosy w dół

Możesz zeskrobać dowolne informacje z Reddit istotne dla Twojej firmy ze względu na następujące potrzeby:

  • Tworzenie aplikacji NLP
  • Śledzenie nastrojów klientów
  • Aby być na bieżąco z trendami rynkowymi
  • W przypadku badań konsumenckich
  • Monitorowanie wpływu kampanii marketingowych

Na przykład, 

  • Marka modowa musi zeskrobać wszystkie teksty komentarzy, tytuły, linki, obrazy i podpisy w subredditach modowych:
    • Opracowanie właściwej strategii cenowej
    • Identyfikacja trendów kolorystycznych
    • Odkrywanie punktów bólu fashionistek z różnymi markami
  • Dziennikarze i twórcy wiadomości muszą skrobać posty autorów z linkami do blogów, aby trenować algorytmy uczenia maszynowego do automatycznego podsumowywania tekstu.
  • Firmy inwestycyjne i handlowe muszą przeszukiwać subreddity związane z "giełdą", aby opracować plan inwestycyjny, interpretując, które akcje są omawiane.

Wyzwania związane ze skrobaniem Reddita

Skrobanie Reddit wykorzystuje skrobaki internetowe (programy komputerowe) do wyodrębniania publicznie dostępnych danych z witryny Reddit. Korzystanie ze skrobaków Reddit jest konieczne ze względu na ograniczenia, z którymi trzeba się zmierzyć podczas korzystania z oficjalnego interfejsu API Reddit. Jeśli jednak użyjesz skrobaka internetowego, który nie korzysta z interfejsu API Reddit do wyodrębniania danych z Reddit, naruszysz warunki korzystania z Reddit. Nie oznacza to jednak, że web scraping jest nielegalny.

Aby sesja scrapingu przebiegła bezproblemowo, musisz ominąć systemy anty-scrapingowe wprowadzone przez Reddit. Najczęstsze techniki anty-skrobania stosowane przez Reddit to:

  • Śledzenie IP
  • Captcha

Problem śledzenia IP można rozwiązać za pomocą serwerów proxy i rotacji IP. Z drugiej strony, problem Captcha można rozwiązać za pomocą rozwiązań Captcha, takich jak 2Captcha.

Jak zeskrobać Reddit za pomocą Pythona

Istnieje pięć sposobów na scrape'owanie Reddita:

  • Skrobanie ręczne - jest to najłatwiejsza, ale najmniej wydajna metoda pod względem szybkości i kosztów. Daje jednak dane o wysokiej spójności.
  • Korzystanie z Reddit API - do skrobania Reddita za pomocą Reddit API potrzebne są podstawowe umiejętności kodowania. Zapewnia ono dane, ale ogranicza liczbę postów w dowolnym wątku Reddit do 1000.
  • Interfejsy API innych firm pokryte cukrem - jest to skuteczne i skalowalne podejście, ale nie jest opłacalne.
  • Narzędzia do skrobania stron internetowych - narzędzia te są skalowalne i wymagają jedynie podstawowej wiedzy na temat korzystania z myszy.
  • Niestandardowe skrypty Scraping - są wysoce konfigurowalne i skalowalne, ale wymagają wysokiego kalibru programowania.

Zobaczmy, jak możemy zeskrobać Reddit za pomocą Reddit API za pomocą poniższych kroków.

Utwórz konto Reddit API

Zanim przejdziesz dalej, musisz utworzyć konto Reddit. Aby korzystać z PRAW, musisz zarejestrować się w Reddit API, klikając ten link.

Importowanie pakietów i modułów

Najpierw zaimportujemy wbudowane moduły Pandas, tj. datetime, oraz dwa moduły innych firm, PRAW i Pandas, jak pokazano poniżej:

import praw
import pandas as pd
import datetime as dt

Uzyskiwanie instancji Reddit i subreddit

Dostęp do danych Reddit można uzyskać za pomocą Praw, co jest skrótem od Python Reddit API Wrapper. Najpierw należy połączyć się z Reddit, wywołując funkcję praw.Reddit i przechowując ją w zmiennej. Następnie należy przekazać do funkcji następujące argumenty.

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')
Teraz możesz uzyskać dostęp do wybranego subreddita. Wywołaj instancję .subreddit z reddit (zmienna) i przekaż nazwę subreddita, do którego chcesz uzyskać dostęp. Na przykład, możesz użyć subreddita r/Nootropics.
subreddit = reddit.subreddit('Nootropics')

Dostęp do wątków

Każdy subreddit ma pięć różnych sposobów organizowania tematów tworzonych przez Redditorów:

  • .new
  • .hot
  • kontrowersyjny
  • pozłacany
  • .top

Możesz pobrać najczęściej głosowane tematy jako:

top_subreddit = subreddit.top()

Otrzymasz obiekt podobny do listy zawierający 100 najlepszych zgłoszeń w r/Nootropics. Jednak limit żądań Reddit wynosi 1000, więc możesz kontrolować wielkość próbki, przekazując limit do .top as:

top_subreddit = subreddit.top(limit=600)

Analizowanie i pobieranie danych

Możesz skrobać dowolne dane. Będziemy jednak pobierać poniższe informacje o tematach:

  • id
  • tytuł
  • wynik
  • data utworzenia
  • treść

Zrobimy to, przechowując nasze dane w słowniku, a następnie używając pętli for, jak pokazano poniżej.

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

Teraz możemy pobrać dane z interfejsu API Reddit. Dodamy informacje do naszego słownika, iterując po naszym obiekcie top_subreddit.

for 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)

Teraz umieszczamy nasze dane w Pandas Dataframes, ponieważ słowniki Pythona nie są łatwe do odczytania.

topics_data = pd.DataFrame(topics_dict)

Eksport CSV

Bardzo łatwo jest tworzyć pliki danych w różnych formatach w Pandas, więc użyjemy następujących linii kodu, aby wyeksportować nasze dane do pliku CSV.

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

Najlepsze serwery proxy Reddit w 2021 roku

Wiesz, że Reddit nie jest zbyt rygorystyczną witryną, jeśli chodzi o ograniczenia dotyczące korzystania z proxy. Możesz jednak zostać złapany i ukarany, jeśli zautomatyzujesz swoje działania na Reddit bez korzystania z serwerów proxy. 

Przyjrzyjmy się zatem niektórym z najlepszych serwerów proxy dla Reddit, które dzielą się na dwie kategorie:

Residential Proxies - są to adresy IP, które dostawca usług internetowych (ISP) przypisuje do urządzenia w określonej lokalizacji fizycznej. Te serwery proxy ujawniają rzeczywistą lokalizację urządzenia, której użytkownik używa do logowania się na stronie internetowej.
Serwery proxy centrum danych - są to różne adresy IP, które nie pochodzą od żadnego dostawcy usług internetowych. Pozyskujemy je od dostawcy usług w chmurze.

Poniżej znajdują się niektóre z najlepszych serwerów proxy dla Reddit.

Smartproxy

Smartproxy jest jednym z najlepszych dostawców proxy premium dla użytkowników indywidualnych, ponieważ jest skuteczny w automatyzacji Reddit. Posiada obszerną pulę adresów IP i zapewnia dostęp do wszystkich adresów IP po zasubskrybowaniu usługi. 

Stormproxy

Ceny i nieograniczona przepustowość usług Stormproxies sprawiają, że są one dobrym wyborem. Są przystępne cenowo i tanie w użyciu. Mają proxy dla różnych przypadków użycia i zapewniają najlepsze proxy domowe do automatyzacji Reddit.

ProxyScrape

ProxyScrape jest jednym z popularnych dostawców usług proxy, który koncentruje się na oferowaniu serwerów proxy do skrobania. Oferuje również dedykowane serwery proxy centrów danych wraz ze współdzielonymi serwerami proxy centrów danych. Posiada ponad 40 tys. serwerów proxy centrów danych, które można wykorzystać do skrobania danych ze stron internetowych.

ProxyScrape świadczy trzy rodzaje usług dla swoich użytkowników, tj, 

Highproxies

Highproxies współpracują z Reddit i mają następujące kategorie proxy:
  • Współdzielone serwery proxy
  • Prywatni pełnomocnicy
  • Serwery proxy witryn z ogłoszeniami
  • Pełnomocnicy sprzedaży biletów
  • Media proxy

Instantproxy

Możesz także użyć Instantproxies do automatyzacji Reddit, ponieważ są one bardzo bezpieczne, niezawodne, szybkie i mają czas działania wynoszący około 99,9%. Są to najtańsze ze wszystkich serwerów proxy centrów danych.

Dlaczego warto korzystać z serwerów proxy Reddit?

Potrzebujesz serwerów proxy, gdy pracujesz z niektórymi automatycznymi narzędziami na Reddit. Dzieje się tak dlatego, że Reddit jest bardzo wrażliwą witryną, która łatwo wykrywa automatyczne działania i blokuje dostęp do platformy. Tak więc, jeśli automatyzujesz niektóre zadania, takie jak głosowania, posty, dołączanie/odłączanie od grup i zarządzanie więcej niż jednym kontem, zdecydowanie musisz korzystać z serwerów proxy, aby uniknąć złych wyników.

Alternatywne rozwiązania dla Scrape Reddit

Możesz przejść do ręcznego skrobania, jeśli twoje wymagania dotyczące skrobania Reddit są niewielkie. Ale jeśli wymagania stają się duże, musisz wykorzystać zautomatyzowane metodologie skrobania, takie jak narzędzia do skrobania stron internetowych i niestandardowe skrypty. Narzędzia do web scrapingu okazują się być efektywne pod względem kosztów i zasobów, gdy dzienne wymagania dotyczące scrapingu nie przekraczają kilku milionów postów.

Przyjrzyjmy się więc niektórym z najlepszych skrobaków Reddit jako najlepszemu rozwiązaniu do skrobania dużych ilości danych Reddit.

Scrapestrom

Scrapestorm jest jednym z najlepszych narzędzi do skrobania dostępnych na rynku, ponieważ działa całkiem nieźle, jeśli chodzi o skrobanie Reddita. Wykorzystuje sztuczną inteligencję do automatycznej identyfikacji kluczowych punktów danych na stronie internetowej.

Apify's Reddit Scraper

Skrobak Reddit Apify ułatwia wyodrębnianie danych bez korzystania z interfejsu API Reddit. Oznacza to, że nie potrzebujesz tokena API dewelopera i autoryzacji od Reddit, aby pobrać dane do użytku komercyjnego. Możesz również zoptymalizować skrobanie, korzystając ze zintegrowanej usługi proxy platformy Apify. 

Wnioski

Omówiliśmy pięć sposobów na skrobanie danych z Reddita, a najłatwiejszym z nich jest użycie Reddit API, ponieważ wymaga jedynie podstawowych umiejętności kodowania. PRAW to opakowanie Pythona dla Reddit API, które umożliwia korzystanie z Reddit API z czystym interfejsem Pythona. Jeśli jednak masz duże wymagania dotyczące skrobania Reddit, możesz wyodrębnić publicznie dostępne dane z witryny Reddit za pomocą skrobaków Reddit. Aby zautomatyzować swoje działania na stronie Reddit, należy skorzystać z centrum danych lub serwerów proxy.