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

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

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

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

Оглавление

Люди могут легко собирать и скрести информацию из различных источников, таких как 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, вам необходимо использовать центр обработки данных или жилые прокси.