Comment récupérer les questions et réponses de Quora en utilisant Python

Commentaires: 0

Cet article se concentre sur la manière d'extraire les données de Quora et sur les raisons pour lesquelles elles peuvent être utiles, ainsi que sur la manière dont Python peut être utilisé pour automatiser cette tâche. Nous examinerons également les principaux outils et bibliothèques nécessaires pour extraire des données de ce site.

Pourquoi récupérer les données de Quora ?

Quora est l'un des sites web de réponses aux questions les plus populaires au monde. Il est particulièrement populaire aux États-Unis, au Royaume-Uni, au Canada, en Australie et dans d'autres pays anglophones. L'analyse des données de Quora présente de nombreux avantages:

  • Fournir des informations actualisées sur des sujets pertinents, des analyses d'experts et des questions sur les tendances dans divers domaines.
  • Interagir avec succès avec des publics cibles en répondant à leurs demandes et en tirant parti de la confiance pour une réputation d'expert professionnel ou personnel.
  • Obtenir des réponses de qualité, partager des expériences et des informations sans effectuer de recherches holistiques approfondies.

La plateforme peut être utilisée pour la recherche, le développement de contenu ou l'élaboration de solutions d'IA.

Comprendre le Web Scraping de Quora

Le web scraping désigne l'action d'extraire des informations et des données d'un site ou d'une page web. Il s'agit d'un moyen moderne de rassembler un grand nombre d'informations et de les convertir en une structure organisée telle qu'un fichier CSV.

Qu'est-ce que la plateforme de web scraping Quora nous donne:

  • la question elle-même;
  • les liens correspondant à certaines pages de quora;
  • le nombre de réponses et de questions jusqu'à présent;
  • les auteurs des réponses;
  • les dates de publication.

Ainsi, le scraping de données Quora donne un aperçu de la participation des utilisateurs, de l'importance et de la popularité des différentes questions ainsi que des réponses qu'elles reçoivent.

Outils essentiels pour le scraping de Quora

Afin de récupérer les données de Quora, des bibliothèques Python sont utilisées. Vous trouverez ci-dessous les ressources les plus pertinentes qui vous permettront d'atteindre cet objectif:

  • BeautifulSoup — pour analyser les pages HTML et collecter les informations recherchées.
  • Requests — pour formuler des demandes de protocole de transfert hypertexte et obtenir les pages web.
  • Selenium — pour l'automatisation du navigateur, ainsi que pour la capture de contenu généré dynamiquement.

Ces bibliothèques permettent d'interagir avec des pages web et de collecter des informations sur Quora sans effort.

Construire un script Python de récupération de Quora

Cette sous-section traite de la construction d'un scraper, qui se fera par étapes. Préparez l'espace de travail, installez les bibliothèques nécessaires, créez des procédures pour envoyer des requêtes, pour analyser le code html et pour travailler avec les informations récupérées.

Étape 1: Configuration de l'environnement du projet Python

Avant de procéder au grattage, il faut préparer l'environnement de travail:

  1. Téléchargez et installez Python à partir de la page officielle.
  2. Mettez en place un environnement virtuel pour compartimenter vos bibliothèques en cours d'utilisation.
    
    python -m venv quora_scraper
    source quora_scraper/bin/activate  # Pour MacOS et Linux
    quora_scraper\Scripts\activate     # Pour Windows
    
    

Étape 2: Installation des bibliothèques Python requises

Installez les bibliothèques dont vous aurez besoin pour le web scraping dans cette étape:


pip install requests beautifulsoup4

Ces interfaces sont essentielles pour transmettre les requêtes HTTP et analyser ensuite les données HTML reçues.

Étape 3: Envoi de demandes à Quora

Pour appeler une certaine API et obtenir une page HTML en retour, nous utiliserons la bibliothèque Requests. Elle est intuitive et permet d'effectuer le travail très rapidement.


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

Étape 4: Analyse de la réponse HTML

Afin d'utiliser Python pour récupérer les réponses de Quora, nous avons besoin d'une autre bibliothèque appelée BeautifulSoup. Voici comment l'installer:


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

Étape 5: Extraction des questions et réponses Quora

Pour extraire les questions et les réponses, il suffit de trouver la balise HTML requise qui contient ces détails. Prenons un exemple:


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)

Étape 6: Gestion de la pagination pour plusieurs pages

Quora a tendance à avoir beaucoup de réponses et il faut souvent faire défiler la page pour tout voir. Pour cela, nous utiliserons Selenium pour automatiser le site web.

Voici comment configurer Selenium et utiliser des proxies pour mieux cacher votre 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)

Une fois que vous avez tout configuré dans Selenium, il vous suffit de faire une requête HTTP, puis de continuer à faire défiler les données et à les capturer:


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

driver.get(url)

Étape 7: Stockage efficace des données extraites

Lorsque vous avez fini de collecter les données, vous voulez les conserver d'une manière qui facilite leur analyse ultérieure. Le meilleur moyen d'y parvenir est de les conserver au format JSON, qui est le plus répandu.


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)

Étape 8: Exportation des données au format CSV ou JSON

Nous avons sauvegardé des données au format JSON, mais dans certains cas, il peut être souhaitable de le faire dans plus d'un format à la fois. Voici donc une fonction qui fait exactement cela:


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)

Étape 9: Gestion des limites de débit et des problèmes de blocage

Quora dispose de certains moyens de défense contre le scraping automatisé de données. Ainsi, si vous envoyez un grand nombre de requêtes à Quora, votre adresse IP sera coupée. Il existe cependant des moyens de contourner ce problème.

  1. Ajouter un certain temps avant d'envoyer la demande suivante.

    Il s'agit d'une imitation basique du comportement humain qui ajoute une certaine forme de décalage lorsqu'une demande est envoyée.

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

    Ajoutez cette fonction après chaque requête pour augmenter les chances de ne pas être bloqué.

  2. Utiliser des serveurs proxy.

    On peut facilement éviter le blocage de l'adresse IP en utilisant des serveurs proxy. Voyons comment l'utiliser avec Requests et 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)
      
      

Étape 10: Tout assembler

Une fois toutes les étapes franchies, il est temps de les combiner et de les intégrer dans un 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')

# Réponses
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")

Conclusion

Dans cet article, nous avons discuté des méthodes de scraping de Quora avec Python. Ces scripts permettent aux utilisateurs d'outrepasser certaines restrictions ainsi que la pagination et l'enregistrement des données dans différents formats tels que JSON et CSV.

Pour la collecte de données à grande échelle, la méthode la plus efficace consiste à utiliser l'API de Quora. En revanche, si vous choisissez stratégiquement d'utiliser BeautifulSoup ou Selenium, l'utilisation de serveurs proxy est indispensable pour garantir des performances durables.

Commentaires:

0 Commentaires