Come scrappare le domande e le risposte di Quora usando Python

Commenti: 0

Questo articolo si concentra su come estrarre i dati di Quora e perché potrebbero essere utili, e su come Python può essere utilizzato per automatizzare questo compito. Analizzeremo anche i principali strumenti e librerie necessari per effettuare lo scrape da questo sito.

Perché raschiare i dati di Quora?

Quora è uno dei siti web più popolari per la risposta alle domande, utilizzato da persone di tutto il mondo. È particolarmente diffuso negli Stati Uniti, nel Regno Unito, in Canada, in Australia e in altri Paesi di lingua inglese. L'analisi dei dati di Quora offre numerosi vantaggi, tra cui:

  • Fornisce informazioni aggiornate su argomenti rilevanti, analisi di esperti e domande di tendenza su vari argomenti.
  • Interagire con successo con il pubblico di riferimento rispondendo alle loro domande e sfruttando la fiducia per una reputazione aziendale o personale di esperti.
  • Ottenere risposte di qualità, condividere esperienze e informazioni senza effettuare ricerche olistiche approfondite.

La piattaforma può essere utilizzata per la ricerca, lo sviluppo di contenuti o la creazione di soluzioni di intelligenza artificiale.

Capire il Web Scraping di Quora

Il web scraping si riferisce all'atto di estrarre informazioni e dati da un sito o da una pagina web. È un modo moderno di raccogliere molte informazioni e di convertirle in una struttura organizzata come un file CSV.

Che cos'è il web scraping ce lo spiega la piattaforma Quora:

  • la domanda stessa;
  • i link corrispondenti ad alcune pagine di Quora;
  • il numero di risposte e di domande finora ricevute;
  • le persone che hanno scritto le risposte;
  • le date di pubblicazione.

Quindi, lo scraping dei dati di Quora fornisce informazioni sulla partecipazione degli utenti, sull'importanza e sulla popolarità delle diverse domande e delle risposte che ricevono.

Strumenti essenziali per lo scraping di Quora

Per effettuare lo scraping dei dati di Quora si utilizzano le librerie Python. Di seguito sono riportate le risorse più importanti che vi permetteranno di raggiungere l'obiettivo:

  • BeautifulSoup - per analizzare le pagine HTML e raccogliere le informazioni ricercate.
  • Requests - per formulare richieste Hypertext Transfer Protocol e ottenere le pagine web.
  • Selenium - per l'automazione del browser e per la cattura di contenuti generati dinamicamente.

Queste librerie permettono di interagire con le pagine web e di raccogliere informazioni da Quora senza alcuno sforzo.

Creare uno script Python per lo scraping di Quora

Questa sottosezione affronta la costruzione di uno scraper, che sarà un'attenzione graduale. Preparate l'area di lavoro, installate le librerie necessarie, create le procedure per inviare le richieste, per analizzare il codice html e per lavorare con le informazioni recuperate.

Passo 1: Impostazione dell'ambiente del progetto Python

Prima di raschiare è necessario preparare l'ambiente di lavoro:

  1. Scaricare e installare Python dalla pagina ufficiale.
  2. Create un ambiente virtuale per compartimentare le librerie in uso.
    
    python -m venv quora_scraper
    source quora_scraper/bin/activate  # Per MacOS e Linux
    quora_scraper\Scripts\activate     # Per Windows
    
    

Passo 2: Installazione delle librerie Python necessarie

In questo passaggio si installano le librerie necessarie per il web scraping:


pip install requests beautifulsoup4

Queste interfacce sono essenziali per la trasmissione delle richieste HTTP e la successiva analisi dei dati HTML ricevuti.

Passo 3: invio di richieste a Quora

Per chiamare una determinata API e ottenere la pagina HTML, utilizzeremo la libreria Requests. È intuitiva e permette di svolgere il lavoro molto velocemente.


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

Passo 4: analizzare la risposta HTML

Per poter utilizzare Python, per scrappare le risposte di Quora, abbiamo bisogno di un'altra libreria chiamata BeautifulSoup. Ecco come installarla:


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

Passo 5: Estrazione delle domande e delle risposte di Quora

Per estrarre le domande e le risposte, è sufficiente trovare il tag HTML richiesto che contiene questi dettagli. Prendiamo un 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: Gestione della paginazione per più pagine

Quora tende ad avere molte risposte e spesso è necessario scorrere la pagina per vedere tutto. Per questo utilizzeremo Selenium per automatizzare il sito web.

Di seguito viene illustrato come configurare Selenium e utilizzare i proxy per nascondere meglio la propria identità:


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)

Dopo aver configurato tutto in Selenium, è sufficiente effettuare una richiesta HTTP e continuare a scorrere verso il basso per catturare questi dati:


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

driver.get(url)

Passo 7: Memorizzazione efficiente dei dati di scraping

Una volta terminata la raccolta dei dati, si desidera conservarli in modo da facilitarne l'analisi in seguito. Il modo migliore per farlo è conservarli in formato JSON, il più utilizzato.


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: Esportazione dei dati in formato CSV o JSON

Abbiamo salvato i dati in JSON, ma in alcuni casi si potrebbe desiderare di farlo in più di un formato contemporaneamente. Ecco quindi una funzione che fa esattamente questo:


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: Gestione dei limiti di velocità e dei problemi di blocco

Quora ha alcune difese contro lo scraping automatico dei dati, per cui se si cerca di inviare molte richieste a Quora, il vostro indirizzo IP verrà tagliato. Esistono comunque dei modi per aggirare questo problema.

  1. Aggiungi un po' di tempo prima di inviare la richiesta successiva.

    Si tratta di un'imitazione di base del comportamento umano che aggiunge una forma di ritardo quando viene inviata una richiesta.

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

    Aggiungi questa funzione dopo ogni query per aumentare le possibilità di non essere bloccato.

  2. Utilizzare i server proxy.

    Si può facilmente evitare il blocco dell'indirizzo IP utilizzando i server proxy. Vediamo come utilizzarli con 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: Mettere tutto insieme

Quindi, dopo aver affrontato tutti i passaggi, è il momento di combinarli e inserirli in un unico script.


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

# Risposte
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")

Conclusione

In questo articolo abbiamo discusso i metodi di scraping di Quora con Python. Tali script costruiti consentono agli utenti di ignorare alcune restrizioni, oltre alla paginazione e al salvataggio dei dati in vari formati, come JSON e CSV.

Per la raccolta di dati su larga scala, il metodo più efficace è l'utilizzo dell'API di Quora. D'altra parte, se si sceglie strategicamente di utilizzare BeautifulSoup o Selenium, l'uso di server proxy è indispensabile per ottenere prestazioni sostenute.

Commenti:

0 Commenti