LinkedIn est l'ensemble de données B2B le plus riche en signaux en ligne, et les commentaires sur les publications de personas cibles sont une mine d'or pour les équipes GTM. Le scraping direct de LinkedIn entraîne des bannissements, mais le SERP Google indexe les publications LinkedIn de manière coopérative. Ce tutoriel montre comment utiliser Scavio pour découvrir des publications par sujet, puis récupérer la page de publication et extraire les signaux au niveau des commentaires pour l'enrichissement CRM.
Prérequis
- Python 3.8+
- Bibliothèque requests
- Une clé API Scavio
- Un sujet ou persona LinkedIn cible (par exemple 'stratégie SDR')
Parcours
Étape 1: Rechercher des publications LinkedIn sur Google
Utiliser un opérateur de site pour limiter les résultats à linkedin.com/posts.
import requests, os
r = requests.post('https://api.scavio.dev/api/v1/search',
headers={'x-api-key': os.environ['SCAVIO_API_KEY']},
json={'query': 'site:linkedin.com/posts "SDR strategy" 2026'})
posts = r.json()['organic_results']Étape 2: Filtrer les URLs de publication
Conserver uniquement les URLs qui pointent vers des publications LinkedIn réelles.
post_urls = [p['link'] for p in posts if '/posts/' in p['link']]Étape 3: Récupérer chaque page de publication
Utiliser l'extracteur de page de Scavio pour récupérer le contenu rendu de la publication.
def fetch_post(url):
r = requests.post('https://api.scavio.dev/api/v1/extract',
headers={'x-api-key': os.environ['SCAVIO_API_KEY']},
json={'url': url, 'render_js': True})
return r.json()Étape 4: Extraire les réactions et les commentateurs
Analyser le HTML extrait ou les données structurées pour obtenir les noms des commentateurs et l'engagement.
from bs4 import BeautifulSoup
def extract_engagement(html):
soup = BeautifulSoup(html, 'html.parser')
commenters = [el.text.strip() for el in soup.select('[data-test-commenter]')]
return {'commenters': commenters, 'count': len(commenters)}Étape 5: Enrichir dans le CRM
Pousser la liste des commentateurs dans votre pipeline d'enrichissement.
for post_url in post_urls[:10]:
post = fetch_post(post_url)
engagement = extract_engagement(post.get('html', ''))
print(post_url, engagement['count'], 'commenters')Exemple Python
import os, requests
API_KEY = os.environ['SCAVIO_API_KEY']
def linkedin_posts(topic, limit=10):
r = requests.post('https://api.scavio.dev/api/v1/search',
headers={'x-api-key': API_KEY},
json={'query': f'site:linkedin.com/posts "{topic}"'})
return [p['link'] for p in r.json()['organic_results'] if '/posts/' in p['link']][:limit]
def fetch_post(url):
r = requests.post('https://api.scavio.dev/api/v1/extract',
headers={'x-api-key': API_KEY},
json={'url': url, 'render_js': True})
return r.json()
if __name__ == '__main__':
for url in linkedin_posts('SDR strategy'):
post = fetch_post(url)
print(url, '- extracted', len(post.get('html', '')), 'chars')Exemple JavaScript
const API_KEY = process.env.SCAVIO_API_KEY;
async function linkedinPosts(topic, limit = 10) {
const r = await fetch('https://api.scavio.dev/api/v1/search', {
method: 'POST',
headers: { 'x-api-key': API_KEY, 'Content-Type': 'application/json' },
body: JSON.stringify({ query: `site:linkedin.com/posts "${topic}"` })
});
const { organic_results } = await r.json();
return organic_results.filter(p => p.link.includes('/posts/')).slice(0, limit).map(p => p.link);
}
const posts = await linkedinPosts('SDR strategy');
console.log(`Found ${posts.length} LinkedIn posts`);Sortie attendue
Found 10 LinkedIn post URLs matching 'SDR strategy'. For each URL, Scavio extracts the rendered page HTML with commenter names and reaction counts. You now have a list of engaged LinkedIn users to enrich into your CRM.