Usando Python para extrair links de perfis sociais para uso no Stilingue

O Stilingue talvez seja o sistema de monitoramento de mídias sociais mais ubíquo em uso pelas agência brasileiras de comunicação, é um mecanismo completo de escuta de redes, com um conjunto de ferramentas de visualização e medição de utilidade definitiva. Na minha experiência com ele é frequente a necessidade de incluir nos monitoramentos uma grande quantidade de perfis sociais, ou seja, no lugar de seguir assuntos, é comum a necessidade de seguir pessoas… e em grande volume.

O Stilingue adota em sua construção de monitoramento uma estrutura específica, muito própria dele: para perfis no Facebook, a lógica segue a sintaxe “facebook:perfil”, no Twitter, “twitter:perfil”, no Instagram, “instagram:perfil”, e não o link completo de cada presença ou o já tradicional @. Para grande volumes de dados, a adequação a essa sintaxe é um trabalho extra para os responsáveis por setar cada escuta, o que resolvi com Python.

O script que descrevo agora cria três soluções:

  1. extrair todos os links presentes em uma determina página web;
  2. filtrar apenas os links para o Facebook e Twitter;
  3. adaptar cada link ao padrão usado no Stilingue.

É simples e começa com a importação das bibliotecas BeautifulSoup, Requests e re.

from bs4 import BeautifulSoup, SoupStrainer
import requests
import re

A primeira função, getLink, é responsável pela maior parte de trabalho: extrair e identificar o que é ou não link, e retorna uma lista apenas com links:

def getLink(link):
    links = []
    html = requests.get(link)
    data = html.text
    soup = BeautifulSoup(data)
    for link in soup.find_all(attrs={'href': re.compile("http")}):
        links.append(link.get('href'))
    return links

As duas seguintes, getFacebook e getTwitter, não precisam de fato ser duas funções diferentes mas, no meu caso, é mais útil o agrupamento em listas distintas que em uma única lista. Basicamente, eles tomam de getLink e lista de links e imprimem, já no formato do Stilingue, a lista das respectivas redes:

def getFacebook(url):
    for link in getLink(url):
        if "//www.facebook.com/" in link:
            facebook = link.replace("https://www.facebook.com/", "facebook:")
            print(facebook)
            
def getTwitter(url):
    for link in getLink(url):
        if "//twitter.com/" in link:
            twitter = link.replace("https://twitter.com/", "twitter:")
            print(twitter)

O uso de ambas é simples. Por exemplo, para pegar todos os perfis de Facebook listados em https://mashable.com/ basta usar:

getFacebook("https://mashable.com/") # ou
getTwitter("https://mashable.com/")

And that’s it!

(Visited 1 times, 1 visits today)

Leave A Comment

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *