темный логотип proxyscrape

Как скрести Reddit с помощью Python

Как это сделать, Python, Скрапинг, Ноябрь-02-20225 минут чтения

Оглавление

Люди могут легко собирать и скрести информацию из различных источников, таких как Facebook, Reddit и Twitter. Скрапер - это специализированный инструмент, который точно и быстро извлекает данные с веб-страницы. API для скраппинга помогают скраперам избежать запрета на использование антискрейперских технологий, которые устанавливают веб-сайты. Однако использование API обходится дороже, чем использование прокси-инструмента, управляемого самостоятельно.

Пользовались ли вы Reddit? Если вы занимаетесь социальными исследованиями и проводите много времени в Интернете, то, скорее всего, вы слышали о Reddit. Reddit называет себя "первой страницей Интернета". Это онлайновый дискуссионный форум, где люди делятся контентом и новостями или комментируют чужие сообщения. Таким образом, это невероятный источник данных для интернет-маркетологов и социальных исследователей. 

У Reddit есть API под названием Python Reddit API Wrapper, сокращенно PRAW, для сбора данных. В этом блоге я покажу вам, как скреативить Reddit с помощью Python. Но перед этим вам нужно знать, зачем вам нужно скрести Reddit.

Зачем вам нужно скрести Reddit?

Если говорить о дизайне Reddit, то он разбит на несколько сообществ, известных как "сабреддиты". В Интернете можно найти любой сабреддит по интересующей вас теме. Социальные исследователи проводят анализ, делают выводы и реализуют планы действий, когда извлекают обсуждения на Reddit по определенной теме. 

Из Reddit можно извлечь множество данных, например:

  • Ссылки
  • Комментарии
  • Изображения
  • Список сабреддитов
  • Материалы для каждого сабреддита
  • Имена пользователей
  • Upvotes
  • Downvotes

Вы можете соскрести с Reddit любую информацию, имеющую отношение к вашему бизнесу, поскольку это необходимо для следующих целей:

  • Создание приложений для НЛП
  • Для отслеживания настроения клиентов
  • Чтобы быть в курсе тенденций рынка
  • Для исследования потребителей
  • Для мониторинга воздействия ваших маркетинговых кампаний

Например, 

  • Модному бренду нужно отсканировать все тексты комментариев, заголовки, ссылки, изображения и подписи в модных сабреддитах:
    • Разработка правильной стратегии ценообразования
    • Определение цветовых тенденций
    • Выяснение болевых точек модниц с помощью различных брендов
  • Журналистам и новостникам приходится скрести авторские посты со ссылками на блоги, чтобы обучить алгоритмы машинного обучения для автоматического резюмирования текста.
  • Инвестиционным и торговым компаниям приходится просматривать сабреддиты, связанные с фондовым рынком, чтобы разработать план инвестирования, интерпретируя, какие акции обсуждаются.

Трудности при работе с Reddit

Для извлечения общедоступных данных с сайта Reddit используются веб-скреперы (компьютерные программы). Использование скреперов Reddit необходимо из-за ограничений, с которыми вы сталкиваетесь при использовании официального API Reddit. Однако если вы используете веб-скрепер, который не использует Reddit API для извлечения данных с Reddit, вы нарушите условия использования Reddit. Но это не означает, что веб-скраппинг незаконен.

Чтобы скраппинг прошел без проблем, вам придется обойти системы защиты от скраппинга, установленные Reddit. Наиболее распространенные методы защиты от скраппинга, используемые Reddit, следующие:

  • Отслеживание IP-адресов
  • Captchas

Вы можете решить проблему отслеживания IP-адресов с помощью прокси-серверов и ротации IP-адресов. С другой стороны, вы можете решить проблему капчи, используя решения для капчи, такие как 2Captcha.

Как скрести Reddit с помощью Python

Существует пять способов скрести Reddit, и они следующие:

  • Ручной скраппинг - это самый простой, но наименее эффективный метод с точки зрения скорости и стоимости. Однако он позволяет получить данные с высокой степенью согласованности.
  • Использование Reddit API - Чтобы скрапить Reddit с помощью Reddit API, вам понадобятся базовые навыки кодирования. Он предоставляет данные, но ограничивает количество сообщений в любой теме Reddit до 1000.
  • API сторонних разработчиков с сахарным напылением - это эффективный и масштабируемый подход, но он неэффективен с точки зрения затрат.
  • Инструменты для веб-скрапинга - эти инструменты масштабируемы и требуют лишь базового умения пользоваться мышью.
  • Пользовательские скрипты для скрапинга - они хорошо настраиваются и масштабируются, но требуют высокого уровня программирования.

Давайте посмотрим, как можно скрапировать Reddit с помощью Reddit API с помощью следующих шагов.

Создайте аккаунт Reddit API

Прежде чем двигаться дальше, вам необходимо создать учетную запись Reddit. Чтобы использовать PRAW, вы должны зарегистрироваться в Reddit API по этой ссылке.

Импорт пакетов и модулей

Сначала мы импортируем встроенные модули Pandas, например, datetime, и два сторонних модуля, PRAW и Pandas, как показано ниже:

импортировать praw
import pandas as pd
import datetime as dt

Получение инстанций Reddit и сабреддитов

Получить доступ к данным Reddit можно с помощью Praw, что расшифровывается как Python Reddit API Wrapper. Сначала вам нужно подключиться к Reddit, вызвав функцию praw.Reddit и сохранив ее в переменной. После этого нужно передать функции следующие аргументы.

reddit = praw.Reddit(client_id='PERSONAL_USE_SCRIPT_14_CHARS', \
                    client_secret='SECRET_KEY_27_CHARS', \
                    user_agent='YOUR_APP_NAME', \
                    имя пользователя='YOUR_REDDIT_USER_NAME',\
                    пароль='YOUR_REDDIT_LOGIN_PASSWORD')
Теперь вы можете получить сабреддит по своему выбору. Итак, вызовите экземпляр .subreddit из reddit (переменная) и передайте имя сабреддита, к которому вы хотите получить доступ. Например, вы можете использовать сабреддит r/Nootropics.
subreddit = reddit.subreddit('Nootropics')

Доступ к нитям

Каждый субреддит имеет пять различных способов организации тем, созданных участниками Reddit:

  • .новый
  • .hot
  • .противоречивый
  • позолоченный
  • .top

Вы можете захватить наиболее популярные темы:

top_subreddit = subreddit.top()

Вы получите объект в виде списка, содержащий 100 лучших работ в r/Nootropics. Однако лимит запросов на Reddit составляет 1000, поэтому вы можете контролировать размер выборки, передав ограничение в .top as:

top_subreddit = subreddit.top(limit=600)

Разбор и загрузка данных

Вы можете скрести любые данные. Тем не менее, мы будем собирать нижеприведенную информацию о темах:

  • id
  • название
  • оценка
  • дата создания
  • основной текст

Для этого мы сохраним наши данные в словаре, а затем используем цикл for, как показано ниже.

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

Теперь мы можем получить данные из Reddit API. Мы добавим информацию в наш словарь, итерируя наш объект 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)

Теперь мы поместим наши данные в Pandas Dataframes, поскольку словари Python не так легко читать.

topics_data = pd.DataFrame(topics_dict)

Экспорт CSV

В Pandas очень легко создавать файлы данных в различных форматах, поэтому мы используем следующие строки кода для экспорта наших данных в CSV-файл.

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

Лучшие прокси для Reddit в 2021 году

Вы знаете, что Reddit не слишком строгий сайт, когда дело доходит до ограничений на использование прокси. Но вас могут поймать и наказать, если вы автоматизируете свои действия на Reddit без использования прокси. 

Итак, давайте рассмотрим некоторые из лучших прокси для Reddit, которые делятся на две категории:

Резидентные прокси - это IP-адреса, которые поставщик услуг Интернета (ISP) присваивает устройству, находящемуся в определенном физическом месте. Эти прокси показывают фактическое местоположение устройства, которое пользователь использует для входа на сайт.
Прокси дата-центра - это различные IP-адреса, которые не исходят от какого-либо интернет-провайдера. Мы получаем их от поставщика облачных услуг.

Ниже перечислены лучшие прокси-серверы для жилых домов и центров обработки данных для Reddit.

Smartproxy

Smartproxy - один из лучших прокси-провайдеров премиум-класса, так как он эффективен для автоматизации Reddit. Он имеет обширный IP-пул и предоставляет доступ ко всем IP, как только вы подписываетесь на его услуги. 

Stormproxy

Цены и неограниченная пропускная способность Stormproxies делают их хорошим выбором. Они доступны и дешевы в использовании. У них есть прокси для различных случаев использования и лучшие прокси для жилых помещений для автоматизации Reddit.

ProxyScrape

ProxyScrape один из популярных прокси-сервисов, который специализируется на предоставлении прокси для скрапбукинга. Он также предлагает выделенные прокси для центров обработки данных наряду с общими прокси для центров обработки данных. У него есть более 40 тысяч прокси-центров, которые вы можете использовать для сбора данных с веб-сайтов в Интернете.

ProxyScrape Компания предоставляет своим пользователям три вида услуг, а именно.., 

Высокие прокси

Highproxies работает с Reddit и имеет следующие категории прокси:
  • Общие прокси-серверы
  • Частные прокси-серверы
  • Прокси-серверы для классифицированных сайтов
  • Прокси-серверы для продажи билетов
  • Медиа-прокси

Instantproxies

Вы также можете использовать Instantproxies для автоматизации Reddit, поскольку они очень безопасны, надежны, быстры и имеют время безотказной работы около 99,9 %. Они являются самыми дешевыми из всех прокси, используемых в центрах обработки данных.

Зачем использовать прокси Reddit?

Прокси-серверы нужны, когда вы работаете с автоматическими инструментами на Reddit. Это связано с тем, что Reddit - очень чувствительный сайт, который легко обнаруживает автоматические действия и блокирует ваш IP от доступа к платформе. Поэтому, если вы автоматизируете некоторые задачи, такие как голосования, посты, вступление/невступление в группы и управление несколькими аккаунтами, вам определенно нужно использовать прокси-серверы, чтобы избежать плохих результатов.

Альтернативные решения для скрапа Reddit

Вы можете использовать ручной скраппинг, если ваши требования к скраппингу Reddit невелики. Но если требования велики, вам придется воспользоваться автоматизированными методологиями, такими как инструменты для веб-скрапинга и пользовательские скрипты. Веб-скреперы оказываются экономичными и эффективными с точки зрения затрат и ресурсов, если ваши ежедневные потребности в скрейпинге находятся в пределах нескольких миллионов сообщений.

Итак, давайте рассмотрим некоторые из лучших скреперов Reddit как лучшее решение для соскабливания больших объемов данных Reddit.

Scrapestrom

Scrapestorm - один из лучших инструментов для скрапбукинга, представленных на рынке, поскольку он отлично работает, когда речь идет о скрапбукинге Reddit. Он использует искусственный интеллект для автоматического определения ключевых точек данных на веб-странице.

Скребок для Reddit от Apify

Скрепер Reddit от Apify позволяет извлекать данные без использования API Reddit. Это означает, что вам не нужен API-токен разработчика и авторизация от Reddit, чтобы загрузить данные для коммерческого использования. Вы также можете оптимизировать работу скрепера, используя встроенный прокси-сервис платформы Apify. 

Заключение

Мы обсудили пять способов соскребать данные Reddit, и самый простой из них - использовать Reddit API, поскольку он требует лишь базовых навыков кодирования. PRAW - это Python-обертка для Reddit API, которая позволяет использовать Reddit API с чистым Python-интерфейсом. Но если у вас большие потребности в скрапинге Reddit, вы можете извлекать общедоступные данные с сайта Reddit с помощью скраперов Reddit. Чтобы автоматизировать свои действия на сайте Reddit, вам необходимо использовать центр обработки данных или жилые прокси.