Como extrair perguntas e respostas do Quora usando Python

Comentários: 0

Este artigo foca-se em como extrair dados do Quora e porque é que isso pode ser útil, e como o Python pode ser usado para automatizar esta tarefa. Também veremos as principais ferramentas e bibliotecas necessárias para extrair dados deste site.

Porquê extrair dados do Quora?

Quora é um dos sítios Web de resposta a perguntas mais populares, utilizado por pessoas de todo o mundo. É especialmente proeminente nos EUA, no Reino Unido, no Canadá, na Austrália e noutros países de língua inglesa. Existem inúmeros benefícios ao analisar os dados do Quora, tais como:

  • Fornecer informações atualizadas sobre tópicos relevantes, análises de especialistas e perguntas de tendências em vários assuntos.
  • Interagir com sucesso com o público-alvo, respondendo às suas perguntas e aproveitando a confiança para um negócio ou reputação de especialista pessoal.
  • Obtenção de respostas de qualidade, partilha de experiências e informações sem realizar pesquisas holísticas extensas.

A plataforma pode ser utilizada na investigação, no desenvolvimento de conteúdos ou na criação de soluções de IA.

Compreender o Quora Web Scraping

A raspagem da Web refere-se ao ato de extrair informações e dados de um sítio Web ou de uma página Web. É uma forma moderna de reunir muita informação e convertê-la numa estrutura organizada como um ficheiro CSV.

O que é web scraping A plataforma Quora nos dá:

  • a pergunta em si;
  • links correspondentes a algumas páginas do quora;
  • o número de respostas e perguntas até agora;
  • as pessoas que escreveram as respostas;
  • as datas em que foram publicadas.

Assim, a raspagem de dados do Quora fornece informações sobre a participação do usuário, a importância e a popularidade de diferentes perguntas, bem como as respostas que elas recebem.

Ferramentas essenciais para a recolha de dados do Quora

Para extrair dados do Quora, são usadas bibliotecas Python. Abaixo estão os recursos mais relevantes que lhe permitirão atingir esse objetivo:

  • BeautifulSoup - para analisar as páginas HTML e coletar as informações procuradas.
  • Requests - para formular pedidos de Hypertext Transfer Protocol e obter as páginas web.
  • Selenium - para automação do navegador, bem como para a captura de conteúdo gerado dinamicamente.

Estas bibliotecas tornam possível interagir com páginas da Web e coletar informações do Quora sem esforço.

Construindo um script Python de raspagem do Quora

Esta subsecção aborda a construção de um scraper, que será uma atenção gradual. Prepare o espaço de trabalho, instale as bibliotecas necessárias, crie procedimentos para enviar pedidos, para analisar o código html e para trabalhar com as informações recuperadas.

Passo 1: Configurar o ambiente do seu projeto Python

Antes de proceder à raspagem, é necessário preparar o ambiente de trabalho:

  1. Descarregue e instale o Python a partir da página oficial.
  2. Configure um ambiente virtual para compartimentar as suas bibliotecas em utilização.
    
    python -m venv quora_scraper
    source quora_scraper/bin/activate  # Para MacOS e Linux
    quora_scraper\Scripts\activate     # Para Windows
    
    

Passo 2: Instalar as bibliotecas Python necessárias

Instale as bibliotecas necessárias para a recolha de dados da Web nesta etapa:


pip install requests beautifulsoup4

Estas interfaces são essenciais para a transmissão de pedidos HTTP e para a análise subsequente dos dados HTML recebidos.

Passo 3: Enviar pedidos para o Quora

Para chamar uma determinada API e obter a página HTML de volta, vamos utilizar a biblioteca Requests. É intuitiva e faz o trabalho muito rapidamente.


url = "https://www.quora.com/How-do-you-open-your-own-company"
response = requests.get(url)

Passo 4: Analisar a resposta HTML

Para usar Python, para extrair respostas do Quora, vamos precisar de outra biblioteca chamada BeautifulSoup. É assim que a instalamos:


soup = BeautifulSoup(response.text, "lxml")
question = soup.find(class_='q-box qu-userSelect--text')

Passo 5: Extrair perguntas e respostas do Quora

Para extrair as perguntas e respostas, só precisa de encontrar a etiqueta HTML necessária que contém esses detalhes. Vejamos um caso:


text_of_answers = []
for answer_id in range(6):
   answers = soup.find_all(
       class_=f'q-box dom_annotate_question_answer_item_{answer_id} qu-borderAll qu-borderColor--raised qu-boxShadow--small qu-mb--small qu-bg--raised')

   for answer in answers:
       text = answer.find('p', class_='q-text qu-display--block qu-wordBreak--break-word qu-textAlign--start')
       text_of_answers.append(text)

Passo 6: Manipular a paginação para várias páginas

Quora tende a ter muitas respostas e muitas vezes é preciso rolar muito a página para ver tudo. Para isso vamos usar o Selenium para automatizar o site.

Abaixo está como configurar o Selenium e usar proxies para esconder melhor sua identidade:


from selenium.webdriver.chrome.options import Options
from seleniumwire import webdriver as wiredriver

chrome_options = Options()
chrome_options.add_argument(f'--proxy-server={proxy_address}')
chrome_options.add_argument(f'--proxy-auth={proxy_username}:{proxy_password}')

chrome_options.add_argument("--headless")

driver = wiredriver.Chrome(options=chrome_options)

Depois de ter configurado tudo no Selenium, só precisa de fazer um pedido HTTP e, em seguida, continuar a deslocar-se para baixo e a capturar estes dados:


url = "https://www.quora.com/How-do-you-open-your-own-company"
driver.execute_script('window.scrollBy(0, 1000)')

driver.get(url)

Passo 7: Armazenar os dados extraídos de forma eficiente

Quando terminar de recolher os dados, deve guardá-los de uma forma que facilite a sua análise posterior. A melhor forma de o fazer é guardá-los no formato JSON, uma vez que é o mais utilizado.


with open(f'quora_data.json', 'w', encoding='utf-8') as json_file:
   json.dump(text_of_answers, json_file, ensure_ascii=False, indent=4)

Passo 8: Exportar dados para o formato CSV ou JSON

Guardámos os dados em JSON, mas, em alguns casos, pode ser desejável fazê-lo em mais do que um formato ao mesmo tempo. Assim, aqui tem uma função que faz exatamente isso:


def export_data(data, csv_filename="quora_data.csv", json_filename="quora_data.json"):
    save_to_csv(data, csv_filename)
    save_to_json(data, json_filename)

export_data(text_of_answers)

Passo 9: Lidar com limites de taxa e problemas de bloqueio

O Quora tem algumas defesas contra a recolha automática de dados, pelo que, se tentar enviar muitos pedidos para o Quora, o seu endereço IP será cortado. No entanto, há formas de contornar esta situação.

  1. Adicionando algum tempo antes de enviar a próxima solicitação.

    Essa é uma imitação básica do comportamento humano que adiciona alguma forma de atraso quando uma solicitação é enviada.

    
    import time
    import random
    
    def random_delay():
        time.sleep(random.uniform(2, 5))
    
    

    Adicione esta função após cada consulta para aumentar as hipóteses de não ser bloqueado.

  2. Usar servidores proxy.

    Pode-se evitar facilmente o bloqueio do endereço IP usando servidores proxy. Vamos ver como ele pode ser usado com Requests e Selenium.

    • requests:
      
      url = "https://www.quora.com/How-do-you-open-your-own-company" 
      
      
      
      proxy = 'LOGIN:PASSWORD@ADDRESS:PORT'
      proxies = {
         "http": f"http://{proxy}",
         "https": f"https://{proxy}",
      }
      
      response = requests.get(url, proxies=proxies)
      
      
    • Selenium:
      
      proxy_address = ""
      proxy_username = ""
      proxy_password = ""
      
      chrome_options = Options()
      chrome_options.add_argument(f'--proxy-server={proxy_address}')
      chrome_options.add_argument(f'--proxy-auth={proxy_username}:{proxy_password}')
      
      chrome_options.add_argument("--headless")
      
      driver = wiredriver.Chrome(options=chrome_options)
      
      

Passo 10: Colocar tudo junto

Assim, depois de ter percorrido todas as etapas, é altura de as combinar e de as colocar num único guião.


import json
from selenium.webdriver.chrome.options import Options
from seleniumwire import webdriver as wiredriver
from bs4 import BeautifulSoup

proxy_address = ""
proxy_username = ""
proxy_password = ""

chrome_options = Options()
chrome_options.add_argument(f'--proxy-server={proxy_address}')
chrome_options.add_argument(f'--proxy-auth={proxy_username}:{proxy_password}')

chrome_options.add_argument("--headless")

driver = wiredriver.Chrome(options=chrome_options)

url = "https://www.quora.com/How-do-you-open-your-own-company"
driver.execute_script('window.scrollBy(0, 1000)')

driver.get(url)

html = driver.page_source

soup = BeautifulSoup(html, "lxml")

question = soup.find(class_='q-box qu-userSelect--text')

# Respostas
text_of_answers = [{'question': question}]
for answer_id in range(6):
   answers = soup.find_all(
       class_=f'q-box dom_annotate_question_answer_item_{answer_id} qu-borderAll qu-borderColor--raised qu-boxShadow--small qu-mb--small qu-bg--raised')

   for answer in answers:
       text = answer.find('p', class_='q-text qu-display--block qu-wordBreak--break-word qu-textAlign--start').text
       text_of_answers.append({
           'answers': text,
       })

with open(f'Quora_data.json', 'w', encoding='utf-8') as json_file:
   json.dump(text_of_answers, json_file, ensure_ascii=False, indent=4)
   print(f"Quora_data.json")

Conclusão

Neste artigo, discutimos os métodos de raspagem do Quora com Python. Esses scripts construídos permitem que os usuários substituam algumas restrições junto com a paginação e o salvamento de dados em vários formatos, como JSON e CSV.

Para a coleta de dados em larga escala, o método mais eficaz seria usar a API do Quora. Por outro lado, se você optar estrategicamente por utilizar o BeautifulSoup ou o Selenium, o uso de servidores proxy é uma obrigação para o desempenho sustentado.

Comentários:

0 Comentários