LinkedIn es el conjunto de datos B2B en línea de mayor señal, y los comentarios en las publicaciones de la persona objetivo son oro para los equipos de GTM. El scraping directo de LinkedIn provoca prohibiciones, pero las SERP de Google indexan las publicaciones de LinkedIn de forma cooperativa. Este tutorial muestra cómo usar Scavio para descubrir publicaciones por tema, luego buscar la página de la publicación y extraer la señal a nivel de comentario para el enriquecimiento de CRM.
Requisitos previos
- Python 3.8+
- solicita biblioteca
- Una clave API de Scavio
- Un tema o persona objetivo de LinkedIn (por ejemplo, 'estrategia SDR')
Guia paso a paso
Paso 1: Buscar en Google publicaciones de LinkedIn
Utilice un operador de sitio para restringir los resultados a 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']Paso 2: Filtrar para publicar URL
Conserve únicamente las URL que apunten a publicaciones reales de LinkedIn.
post_urls = [p['link'] for p in posts if '/posts/' in p['link']]Paso 3: Obtener cada página de publicación
Utilice el extractor de páginas de Scavio para extraer el contenido de la publicación renderizada.
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()Paso 4: Extraer reacciones y comentaristas
Analice el HTML extraído o los datos estructurados en busca de nombres de comentaristas y participación.
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)}Paso 5: Enriquecerse en CRM
Inserte la lista de comentaristas en su proceso de enriquecimiento.
for post_url in post_urls[:10]:
post = fetch_post(post_url)
engagement = extract_engagement(post.get('html', ''))
print(post_url, engagement['count'], 'commenters')Ejemplo en 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')Ejemplo en 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`);Salida esperada
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.