escuro proxyscrape logótipo

Como fazer scraping do Reddit usando Python

Como fazer, Python, Raspagem, Nov-02-20225 minutos de leitura

Índice

As pessoas podem facilmente recolher e extrair informações de várias fontes, como o Facebook, o Reddit e o Twitter. Pode pensar-se num raspador como uma ferramenta especializada que extrai dados de uma página Web com precisão e rapidez. As APIs de raspagem ajudam os raspadores a evitar serem banidos por técnicas anti-raspagem que os sítios Web colocam. No entanto, a utilização de APIs é dispendiosa em comparação com uma ferramenta proxy gerida pelo próprio utilizador.

Já utilizou o Reddit? Se é um investigador social e passa muito tempo em linha, é provável que já tenha ouvido falar do Reddit. O Reddit apresenta-se como a "primeira página da Internet". É um fórum de discussão online onde as pessoas partilham conteúdos e notícias ou comentam as publicações de outras pessoas. Portanto, é uma fonte incrível de dados para profissionais de marketing da Internet e pesquisadores sociais. 

O Reddit tem uma API chamada Python Reddit API Wrapper, abreviada para PRAW, para rastrear dados. Neste blogue, vou mostrar-lhe os passos de como fazer scrape do Reddit usando python. Mas antes disso, você precisa saber por que você tem que raspar o Reddit.

Porque é que precisa de fazer scraping do Reddit?

Se falarmos do design do Reddit, este está dividido em várias comunidades conhecidas como "subreddits". Pode encontrar qualquer subreddit do seu tópico de interesse na Internet. Os investigadores sociais efectuam análises, fazem inferências e implementam planos de ação quando extraem discussões do Reddit sobre um determinado tópico. 

Pode extrair muitos pontos de dados do Reddit, tais como:

  • Ligações
  • Comentários
  • Imagens
  • Lista de subreddits
  • Submissões para cada subreddit
  • Nomes de utilizador
  • Upvotes
  • Downvotes

Pode extrair qualquer informação do Reddit que seja relevante para a sua atividade devido às seguintes necessidades:

  • Para criar aplicações de PNL
  • Para acompanhar os sentimentos dos clientes
  • Para se manter a par das tendências do mercado
  • Para estudos de consumo
  • Para monitorizar o impacto das suas campanhas de marketing

Por exemplo, 

  • Uma marca de moda precisa de recolher todos os textos de comentários, títulos, ligações, imagens e legendas em subreddits de moda para:
    • Conceber a estratégia de preços correcta
    • Identificar tendências de cor
    • Descobrir os pontos fracos das fashionistas com várias marcas
  • Os intervenientes no jornalismo e nas notícias têm de recolher as publicações dos autores com hiperligações de blogues para treinar algoritmos de aprendizagem automática para a sumarização automática de textos.
  • As empresas de investimento e de comércio têm de analisar os subreddits relacionados com o "mercado de acções" para elaborar um plano de investimento, interpretando as acções que estão a ser discutidas.

Desafios da recolha de dados do Reddit

O scraping do Reddit utiliza web scrapers (programas de computador) para extrair dados publicamente disponíveis do site do Reddit. É necessário utilizar os raspadores do Reddit devido às limitações que tem de enfrentar ao utilizar a API oficial do Reddit. No entanto, se utilizar o web scraper que não utiliza a API do Reddit para extrair dados do Reddit, estará a violar os termos de utilização do Reddit. Mas isso não significa que a raspagem da Web seja ilegal.

Para ter uma sessão de scraping sem problemas, terá de contornar os sistemas anti- scraping implementados pelo Reddit. As técnicas anti-raspagem mais comuns usadas pelo Reddit são:

  • Rastreio de IP
  • Captchas

Pode resolver o problema do rastreio de IP com a ajuda de proxies e rotação de IP. Por outro lado, pode resolver o problema dos Captchas utilizando soluções Captcha como o 2Captcha.

Como fazer scraping do Reddit usando Python

Existem cinco formas de fazer scraping do Reddit, e são elas:

  • Raspagem manual - É o método mais fácil, mas menos eficiente em termos de velocidade e custo. No entanto, produz dados com elevada consistência.
  • Utilizar a API do Reddit - É necessário ter conhecimentos básicos de programação para extrair dados do Reddit utilizando a API do Reddit. Fornece os dados, mas limita o número de mensagens em qualquer tópico do Reddit a 1000.
  • APIs de terceiros revestidas de açúcar - É uma abordagem eficaz e escalável, mas não é rentável.
  • Ferramentas de Web Scraping - Estas ferramentas são escaláveis e requerem apenas conhecimentos básicos de utilização de um rato.
  • Scripts de raspagem personalizados - São altamente personalizáveis e escaláveis, mas exigem um elevado calibre de programação.

Vamos ver como podemos fazer scrape do Reddit utilizando a API do Reddit com a ajuda dos seguintes passos.

Criar conta da API do Reddit

É necessário criar uma conta Reddit antes de avançar. Para utilizar PRAW, tem de se registar na API do Reddit seguindo esta ligação.

Importar pacotes e módulos

Em primeiro lugar, importaremos os módulos internos do Pandas, ou seja, datetime, e dois módulos de terceiros, PRAW e Pandas, como mostrado abaixo:

importar praw
import pandas as pd
import datetime as dt

Obter instâncias do Reddit e do subreddit

Você pode acessar os dados do Reddit usando o Praw, que significa Python Reddit API Wrapper. Primeiro, tens de te ligar ao Reddit chamando a função praw.Reddit e armazenando-a numa variável. Depois, tens de passar os seguintes argumentos para a função.

reddit = praw.Reddit(client_id='PERSONAL_USE_SCRIPT_14_CHARS', \
                    client_secret='SECRET_KEY_27_CHARS ', \
                    user_agent='SEU_NOME_DA_APP', \
                    username='SEU_NOME_DE_USUÁRIO_REDDIT', \
                    password='A SUA PALAVRA-PASSE DE INÍCIO DE SESSÃO_REDITARIO')
Agora, você pode obter o subreddit de sua escolha. Então, chame a instância .subreddit do reddit (variável), e passe o nome do subreddit que você quer acessar. Por exemplo, você pode usar o subreddit r/Nootropics.
subreddit = reddit.subreddit('Nootropics')

Aceder aos fios

Cada subreddit tem as cinco formas diferentes de organizar os tópicos criados pelos Redditors:

  • .novo
  • .quente
  • .controverso
  • .dourado
  • .topo

Pode obter os tópicos mais votados como:

top_subreddit = subreddit.top()

Obterá um objeto do tipo lista com as 100 melhores submissões em r/Nootropics. No entanto, o limite de pedidos do Reddit é de 1000, pelo que pode controlar o tamanho da amostra passando um limite para .top as:

top_subreddit = subreddit.top(limit=600)

Analisar e descarregar os dados

Pode recolher todos os dados que quiser. No entanto, iremos recolher as seguintes informações sobre os tópicos:

  • id
  • título
  • pontuação
  • data de criação
  • corpo do texto

Para tal, armazenamos os nossos dados num dicionário e, em seguida, utilizamos um ciclo for, como se mostra abaixo.

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

Agora, podemos extrair os dados da API do Reddit. Vamos anexar as informações ao nosso dicionário, iterando através do nosso objeto top_subreddit.

for submission in top_subreddit:
    topics_dict["id"].append(submission.id)
    resumo_de_tópicos["título"].append(submissão.título)
    resumo_de_tópicos["pontuação"].append(submissão.pontuação)
    resumo dos tópicos["criado"].append(submissão.criado)
    resumo_tópicos["corpo"].append(submissão.auto-texto)

Agora, colocamos os nossos dados em Pandas Dataframes, uma vez que os dicionários Python não são fáceis de ler.

tópicos_dados = pd.DataFrame(tópicos_dict)

Exportar CSV

É muito fácil criar ficheiros de dados em vários formatos no Pandas, pelo que utilizamos as seguintes linhas de código para exportar os nossos dados para um ficheiro CSV.

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

Melhores proxies do Reddit de 2021

Você sabe que o Reddit não é um site muito rigoroso quando se trata de restrições de uso de proxy. Mas você pode ser pego e penalizado se automatizar suas ações no Reddit sem usar proxies. 

Por isso, vamos analisar alguns dos melhores proxies para o Reddit que se enquadram em duas categorias:

Proxies residenciais - Estes são os endereços IP que o fornecedor de serviços Internet (ISP) atribui a um dispositivo numa determinada localização física. Estes proxies revelam a localização real do dispositivo que o utilizador utiliza para iniciar sessão num sítio Web.
Proxies de centro de dados - Estes são vários endereços IP que não têm origem em nenhum fornecedor de serviços Internet. Adquirimo-los a um fornecedor de serviços na nuvem.

Seguem-se alguns dos principais proxies residenciais e de centros de dados para o Reddit.

Smartproxy

O Smartproxy é um dos principais fornecedores de proxy residencial premium, pois é eficaz para a automatização do Reddit. Ele tem um extenso pool de IPs e fornece acesso a todos os IPs assim que você se inscreve no seu serviço. 

Stormproxy

O preço e a largura de banda ilimitada dos Stormproxies fazem deles uma boa escolha. Eles são acessíveis e baratos de usar. Eles têm proxies para vários casos de uso e fornecem os melhores proxies residenciais para automação do Reddit.

ProxyScrape

ProxyScrape é um dos populares fornecedores de serviços de proxy que se concentra na oferta de proxies para scraping. Também oferece proxies de centros de dados dedicados, juntamente com os proxies de centros de dados partilhados. Tem mais de 40 mil proxies de centros de dados que pode utilizar para extrair dados de sítios Web na Internet.

ProxyScrape fornece três tipos de serviços aos seus utilizadores, i.e., 

Proxies elevados

Highproxies trabalha com o Reddit e tem as seguintes categorias de proxies:
  • Proxies partilhados
  • Proxies privados
  • Proxies de sites classificados
  • Proxies de emissão de bilhetes
  • Proxies dos media

Proxies instantâneos

Também pode utilizar Instantproxies para a automatização do Reddit, uma vez que são muito seguros, fiáveis, rápidos e têm um tempo de atividade de cerca de 99,9%. Eles são os mais baratos de todos os proxies de datacenter.

Porquê utilizar proxies do Reddit?

Precisa de proxies quando está a trabalhar com algumas ferramentas automáticas no Reddit. Isso acontece porque o Reddit é um site muito sensível que detecta facilmente acções automáticas e bloqueia o acesso do seu IP à plataforma. Por isso, se estiver a automatizar algumas das tarefas, como votos, publicações, aderir/desaderir a grupos e gerir mais do que uma conta, precisa definitivamente de utilizar proxies para evitar maus resultados.

Soluções alternativas para o Scrape Reddit

Pode optar pela recolha manual de dados se os seus requisitos de recolha de dados do Reddit forem pequenos. Mas se os requisitos forem grandes, terá de utilizar metodologias de recolha automatizada de dados, como ferramentas de recolha de dados da Web e scripts personalizados. Os raspadores da Web revelam-se eficientes em termos de custos e recursos quando os seus requisitos diários de raspagem não ultrapassam alguns milhões de publicações.

Então, vamos ver alguns dos melhores raspadores do Reddit como a melhor solução para raspar grandes quantidades de dados do Reddit.

Scrapestrom

O Scrapestorm é uma das melhores ferramentas de raspagem disponíveis no mercado, pois funciona muito bem quando se trata de raspar o Reddit. Utiliza a inteligência artificial para identificar automaticamente os principais pontos de dados na página Web.

Apify's Reddit Scraper

O raspador do Reddit da Apify facilita a extração de dados sem utilizar a API do Reddit. Isso significa que você não precisa de um token de API de desenvolvedor e autorização do Reddit para baixar os dados para uso comercial. Também pode otimizar o seu scraping utilizando o serviço de proxy integrado da plataforma Apify. 

Conclusão

Discutimos cinco maneiras de extrair dados do Reddit, e a mais fácil é usar a API do Reddit, pois requer apenas habilidades básicas de codificação. PRAW é um wrapper Python para a API do Reddit que permite usar uma API do Reddit com uma interface Python limpa. Mas quando tiver grandes requisitos de raspagem do Reddit, pode extrair dados publicamente disponíveis do sítio Web do Reddit com a ajuda de raspadores do Reddit. Para automatizar as suas acções no sítio Web do Reddit, é necessário utilizar um centro de dados ou proxies residenciais.