LinkedIn es un excelente lugar para encontrar clientes potenciales e interactuar con prospectos. Para interactuar con clientes potenciales, necesitará una lista de usuarios para contactar. Sin embargo, obtener esa lista puede ser difícil porque LinkedIn ha dificultado las herramientas de web scraping. Es por eso que hice un script para buscar en Google perfiles de empresas y usuarios potenciales de LinkedIn.
Necesitará Python 2.7+ y algunos paquetes para comenzar. Una vez que haya instalado Python, puede ejecutar el siguiente comando para instalar los paquetes necesarios.
pip install requests
Primero, necesitamos importar todos los paquetes que necesitamos. Estos paquetes se utilizan para aleatorizar al agente de usuario y realizar las solicitudes. Luego, regex se usa para analizar los perfiles y enlaces de LinkedIn.
import random import argparse import requests import re
Creamos una clase LinkedinScraper que rastrea y almacena los datos para cada una de las solicitudes. La clase requiere dos parámetros palabra clave y límite. El parámetro de palabra clave especifica el término de búsqueda. El parámetro de límite especifica una cantidad máxima de enlaces para buscar.
class LinkedinScraper (object) : def __init__ (self, keyword, limit) : """ :param keyword: a str of keyword(s) to search for :param limit: number of profiles to scrape """ self.keyword = keyword.replace( ' ' , '%20' ) self.all_htmls = "" self.server = 'www.google.com' self.quantity = '100' self.limit = int(limit) self.counter = 0
Creamos una clase LinkedinScraper que rastrea y almacena los datos para cada una de las solicitudes. La clase requiere dos parámetros palabra clave y límite. El parámetro de palabra clave especifica el término de búsqueda. El parámetro de límite especifica una cantidad máxima de enlaces para buscar.
La clase LinkedinScraper tiene tres funciones principales, buscar , parse_links y parse_people .
La función de búsqueda realizará las solicitudes en función de las palabras clave. Primero genera una URL que es una consulta específica de Google basada en la palabra clave y el límite . Luego realiza las solicitudes y guarda todo el HTML en self.all_htmls
def search (self) : """ perform the search :return: a list of htmls from Google Searches """ # choose a random user agent user_agents = [ 'Mozilla/5.0 (Windows NT 6.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1464.0 Safari/537.36' , 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0) chromeframe/10.0.648.205' , 'Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1500.55 Safari/537.36' , 'Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1090.0 Safari/536.6' , 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.19 (KHTML, like Gecko) Ubuntu/11.10 Chromium/18.0.1025.142 Chrome/18.0.1025.142 Safari/535.19' , 'Mozilla/5.0 (Windows NT 5.1; U; de; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6 Opera 11.00' ] while self.counter < self.limit: headers = { 'User-Agent' : random.choice(user_agents)} url = 'http://google.com/search?num=100&start=' + str(self.counter) + '&hl=en&meta=&q=site%3Alinkedin.com/in%20' + self.keyword resp = requests.get(url, headers=headers) if ( "Our systems have detected unusual traffic from your computer network." ) in resp.text: print( "Running into captchas" ) return self.all_htmls += resp.text self.counter += 100
La función parse_links buscará el HTML y realizará un análisis de expresiones regulares para extraer todos los enlaces de LinkedIn.
def parse_links (self) : reg_links = re.compile( r"url=https:\/\/www\.linkedin.com(.*?)&" ) self.temp = reg_links.findall(self.all_htmls) results = [] for regex in self.temp: final_url = regex.replace( "url=" , "" ) results.append( "https://www.linkedin.com" + final_url) return results
De manera similar, la función parse_people buscará en HTML su nombre y título.
def parse_people(self): """ :param html: parse the html for Linkedin Profiles using regex :return: a list of """ reg_people = re.compile( r'">[a-zA-Z0-9._ -]* -|\| LinkedIn' ) self.temp = reg_people.findall(self.all_htmls) print(self.temp) results = [] for iteration in (self.temp): delete = iteration.replace( ' | LinkedIn' , '' ) delete = delete .replace( ' - LinkedIn' , '' ) delete = delete .replace( ' profiles ' , '' ) delete = delete .replace( 'LinkedIn' , '' ) delete = delete .replace( '"' , '' ) delete = delete .replace( '>' , '' ) delete = delete .strip( "-" ) if delete != " " : results.append( delete ) return results
Este es un ejemplo del uso de la clase para buscar 500 perfiles para la empresa Tesla.
Este es un script bastante simple, pero debería ser un buen punto de partida. Faltan algunos errores y manejo de captcha cuando se realizan demasiadas solicitudes a Google. Recomiendo usar una API de búsqueda de Google como https://goog.io para realizar búsquedas ilimitadas. O use RapidAPI Google Search API para realizar la búsqueda con cualquier idioma.
Puede encontrar el código completo en https://github.com/googio/linkedin_scraper.git
Este código es rápido. Hacer demasiadas solicitudes a Google resultará en el bloqueo de su IP. Utilice proxies cuando ejecute este script. O consulta los documentos de la API de goog.io https://goog.io/docs sobre cómo realizar búsquedas sin preocuparte de que te bloqueen.
También publicado aquí