paint-brush
Ejecutar un script de Python para extraer perfiles de LinkedIn de Googlepor@tuangeek
9,919 lecturas
9,919 lecturas

Ejecutar un script de Python para extraer perfiles de LinkedIn de Google

por Tuan5m2022/01/06
Read on Terminal Reader
Read this story w/o Javascript

Demasiado Largo; Para Leer

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. Hice un script para buscar en Google posibles usuarios de LinkedIn y perfiles de empresas.

Companies Mentioned

Mention Thumbnail
Mention Thumbnail
featured image - Ejecutar un script de Python para extraer perfiles de LinkedIn de Google
Tuan HackerNoon profile picture

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.

Herramientas necesarias

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

Script Scraper de LinkedIn

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í