Les plateformes de réseaux sociaux, en particulier, fournissent une mine d’informations qui peuvent être utilisées au profit de vos études de marché, de votre analyse concurrentielle, de la gestion de votre réputation et de vos efforts de service client. Le web scraping permet à votre entreprise de tirer parti de ces données, de prendre des décisions éclairées, d’améliorer sa réputation et d’acquérir un avantage concurrentiel sur le marché.
Grâce au web scraping, vous pouvez naviguer efficacement dans des pages web, sélectionner des données spécifiques et les extraire dans un format structuré, par exemple dans un fichier CSV ou JSON.
Dans ce guide, vous apprendrez à collecter des données de réseaux sociaux à partir de différentes plateformes utilisant Python. Python est largement reconnu comme un outil puissant pour le web scraping en raison de sa panoplie étendue de bibliothèques qui facilitent l’analyse, l’extraction et le classement de différents types de données.
La collecte de données sur les réseaux sociaux avec Python
Avant de commencer ce tutoriel, vous aurez besoin des éléments suivants :
- Python : le langage de programmation utilisé pour cette présentation.
- pip: : le gestionnaire de packages pour Python. Il vous permet d’obtenir des bibliothèques spécifiques à Python.
- Beautiful Soup: un package Python utile pour l’analyse et l’extraction de données de fichiers HTML et XML. Vous trouverez les informations nécessaires pour le téléchargement dans cette documentation
- Selenium:: une structure permettant la réalisation d’opérations sur un navigateur web. Selenium s’avère particulièrement utile pour simuler un navigateur réel, ce qui vous permet de rendre et d’analyser des sites web dynamiques et compatibles avec JavaScript. Vous trouverez plus d’informations sur l’installation de Selenium dans ces documents officiels
Dans ce tutoriel, vous allez configurer votre environnement Python en installant ces packages, puis en lançant des exécutables Python pour faire du web scraping. Cependant, le problème est que les plateformes de réseaux sociaux, comme Facebook et Instagram, utilisent souvent des mesures de blocage contre les bots de scraping : ils peuvent imposer des exigences relativement aux informations de connexion, cacher des données utiles derrière des boutons et du contenu dynamique, ou utiliser JavaScript pour afficher leurs données. Vous utiliserez Selenium pour contourner ces mesures et limiter votre scraping aux pages publiques afin de réduire le besoin d’informations de connexion.
Tout le code de ce tutoriel est disponible dans ce référentiel GitHub.
Collecter des données sur Facebook avec Python
Lorsque vous faites du web scraping, la première étape consiste à explorer la page que vous devez analyser. Vous devez identifier les données nécessaires, les chemins d’accès que votre bot prendra et les sélecteurs spécifiques aux données que vous recherchez.
Par exemple, lorsque vous regardez le profil Facebook public de Tom Cruise, vous trouverez des informations sur lui, des liens vers ses autres pages, les posts qu’il envoie pour faire la promotion de ses films, ainsi que divers médias associés. Toutes les informations que vous voyez sur cette page sont accessibles et peuvent être extraites.
Afin de collecter le contenu des messages de Tom Cruise, vous devez inspecter la page pour trouver les sélecteurs qui sont partagés dans les posts qui vous intéressent :
Une fois que vous avez trouvé des sélecteurs permettant d’isoler les données dont vous avez besoin, vous pouvez commencer à écrire votre code de scraping. Ouvrez un fichier Python (.py
) et importez les packages que vous allez utiliser : Selenium pour accéder au contenu de votre page HTML, Beautiful Soup pour analyser et extraire les données spécifiques, et pandas pour structurer et nettoyer votre jeu de données final :
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from bs4 import BeautifulSoup
import pandas as pd
Ensuite, définissez la page dont vous voulez extraire les données et ajoutez des options à Selenium pour simuler le comportement d’un utilisateur réel et éviter de faire bloquer votre robot :
# Define the URL you want to scrape
url = 'https://www.facebook.com/officialtomcruise/'
# Define the options for the Chrome webdriver
options = Options()
options.add_argument('--headless')
options.add_argument('--disable-gpu')
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')
options.add_argument('--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3')
# Create a new instance of the Chrome webdriver with the defined options
driver = webdriver.Chrome(options=options)
# Load the Facebook page in the webdriver
driver.get(url)
À ce stade, vous avez extrait l’ensemble de la page. Cependant, celle-ci n’est pas dans un format lisible par l’homme. Pour modifier ce paramètre, utilisez Beautiful Soup pour extraire le texte souhaité à l’aide du sélecteur que vous avez précédemment isolé :
# Extract the HTML content of the page using BeautifulSoup
html_content = driver.page_source
soup = BeautifulSoup(html_content, 'html.parser')
posts = soup.find_all('div', class_='x1l90r2v')
# Extract the text content of each post
post_content = [post.text for post in posts]
# Save the scraped data in a CSV file
data = pd.DataFrame({'post_content': post_content})
data.to_csv('facebook_posts.csv', index=False)
# Print the scraped data
print(data)
# Close the webdriver
driver.quit()
Une fois que vous avez isolé les données dont vous avez besoin, vous pouvez les structurer sous forme de DataFrame (ou n’importe quelle autre structure qui vous convient). Un DataFrame est une structure de données couramment utilisée, car elle vous fournit une vue tabulaire de vos données :
Collecter des données sur Twitter avec Python
Maintenant que vous avez collecté des données sur Facebook, utilisez le même processus sur Twitter.
Explorez la page Twitter de Tom Cruise et isolez un sélecteur pouvant être utilisé pour les données que vous recherchez :
Dans cet exemple, vous allez extraire le texte de tous ses tweets. Si vous regardez le code du site web, il existe un attribut data-testid = tweetText
qui peut être utilisé pour extraire cela efficacement.
Il convient de faire attention aux différents comportements de site web que vous pouvez rencontrer. Par exemple, Twitter utilise JavaScript pour implémenter une fonction de défilement infini. Cela signifie que davantage de données apparaissent lorsque vous faites défiler la page ; mais si vous tentez d’extraire le contenu de la page juste après son chargement, vous risquez de ne pas obtenir toutes les données nécessaires ou d’obtenir une exception.
Pour résoudre ce problème, vous pouvez soit configurer votre bot pour qu’il attende un certain temps avant d’extraire le contenu considéré, soit vous assurer que la page a suffisamment défilé pour que toutes les données requises soient disponibles.
Créez à nouveau un fichier Python et utilisez le code suivant pour extraire le contenu souhaité :
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from bs4 import BeautifulSoup
import pandas as pd
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.support.ui import WebDriverWait
from selenium.common.exceptions import WebDriverException
from selenium.webdriver.common.by import By
import time
# Define the URL you want to scrape
url = 'https://twitter.com/TomCruise'
# Define the options for the Chrome webdriver to mimic a real page
options = Options()
options.add_argument('--headless')
options.add_argument("--incognito")
options.add_argument('--disable-gpu')
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')
options.add_argument('--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3')
options.add_argument("--enable-javascript")
# Create a new instance of the Chrome webdriver with the defined options
driver = webdriver.Chrome(options=options)
# Load the Twitter page in the webdriver
driver.get(url)
# Wait for tweets to populate the page
try:
WebDriverWait(driver, 60).until(expected_conditions.presence_of_element_located(
(By.CSS_SELECTOR, '[data-testid="tweet"]')))
except WebDriverException:
print("Something happened. No tweets loaded")
# scroll a bit for more tweets to appear
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(10)
# Extract the HTML content of the page using BeautifulSoup
html_content = driver.page_source
soup = BeautifulSoup(html_content, 'html.parser')
posts = soup.find_all(attrs={"data-testid": "tweetText"})
# Extract the text content of each post
post_content = [post.text for post in posts]
# Save the scraped data in a CSV file
data = pd.DataFrame({'post_content': post_content})
data.to_csv('twitter_posts.csv', index=False)
# Print the scraped data
print(data)
# Close the webdriver
driver.quit()
Collecter des données sur Instagram avec Python
Pour finir, découvrez comment vous pouvez collecter des données Instagram.
La page Instagram de Tom Cruise se présente comme une galerie multimédia qui contient uniquement des photos et des vidéos si vous n’êtes pas connecté ; cependant, en explorant la page, vous constaterez que les alternatives textuelles des médias contiennent aussi, dans la plupart des cas, le contenu des posts correspondants. Cela signifie que vous pouvez extraire les fichiers de support des URL et leurs alternatives textuelles directement sur cette page :
Pour ce faire, il vous suffit de trouver les sélecteurs de vos données et de structurer le DataFrame pour collecter vos données :
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from bs4 import BeautifulSoup
import pandas as pd
# Define the URL you want to scrape
url = 'https://www.instagram.com/tomcruise'
# Define the options for the Chrome webdriver
options = Options()
options.add_argument('--headless')
options.add_argument('--disable-gpu')
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')
options.add_argument('--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3')
# Create a new instance of the Chrome webdriver with the defined options
driver = webdriver.Chrome(options=options)
# Load the Instagram page in the webdriver
driver.get(url)
# Extract the HTML content of the page using BeautifulSoup
html_content = driver.page_source
soup = BeautifulSoup(html_content, 'html.parser')
# Collect instagram links
links = soup.find_all('a', href= True)
# Limit the collected links to posts data
posts = []
for i in links :
if '/p/' in i:
posts.append(i)
# Save the scraped data in a CSV file
data = pd.DataFrame({'post_links': posts})
data.to_csv('instagram_posts.csv', index=False)
# Print the scraped data
print(data)
# Close the webdriver
driver.quit()
La collecte de données sur les réseaux sociaux avec Bright Data
Le web scraping peut être un processus long et fastidieux, mais ce n’est pas une fatalité.
Bright Data est une plateforme web qui permet aux entreprises d’accéder facilement à de gros volumes de données structurées publiquement disponibles sur le web. Ces données régulièrement entretenues sont facilement disponibles sous la forme de jeux de données de réseaux sociaux. Ces jeux de données contiennent une foule de données – profils utilisateur, posts et commentaires – auxquelles vous pouvez accéder sans avoir à faire du web scraping par vous-même.
En outre, si vous souhaitez récupérer des données d’un autre emplacement, les outils Web Scraper IDE et Web Unlocker de Bright Data peuvent vous aider. Ces outils sont fournis avec des modèles prêts à l’emploi, qui permettent de réduire la quantité de code que vous devez écrire, et intègrent des proxys qui vous aideront à accéder à des contenus géo-restreints et à résoudre des CAPTCHA en cours de route.
Il peut être plus efficace et plus fiable de faire appel à Bright Data pour collecter des données sur les réseaux sociaux plutôt que de le faire par vous-même. En outre, Bright Data fournit un réseau de proxys étendu, qui vous permet d’éviter les restrictions de débit et les blocages d’adresse IP lorsque vous collectez des données sur les plateformes de réseaux sociaux.
Conclusion
Dans cet article, vous avez découvert les principes de base du web scraping et vous avez appris à utiliser Python pour extraire des données de réseaux sociaux sur des plateformes telles que Facebook, Twitter et Instagram. Nous avons également examiné les facteurs importants à prendre en compte lors d’une collecte de données manuelle sur des sites web de réseaux sociaux ; et nous avons présenté les solutions proposées par Bright Data pour la collecte de données sur les réseaux sociaux, en particulier.
Le web scraping vous permet de collecter des données sur les réseaux sociaux à des fins de recherche marketing, d’analyse du sentiment des consommateurs et d’analyse des tendances. Cependant, vous devez utiliser le web scraping de manière éthique et respecter les conditions de service des sites et des réseaux sociaux sur lesquels vous collectez des données. Assurez-vous que les données que vous collectez sont publiques et ne violent pas les lois en vigueur sur la protection de la vie privée. Les outils proposés par Bright Data sont particulièrement utiles car ils vous aident à ne pas vous égarer dans les questions juridiques et éthiques liées à la collecte de données.