El scraping de datos de LinkedIn puede ser increíblemente valioso por varias razones:
El artículo hará hincapié en técnicas y estrategias importantes, incluida la importancia de evitar la detección a través de proxies y cabeceras en primer lugar. Se utilizará la librería requests para realizar peticiones HTTP mientras que lxml se empleará para parsear contenido HTML.
Antes de empezar, asegúrate de que tienes Python instalado en tu máquina.
Instala las librerías necesarias usando pip:
pip install requests
pip install lxml
Aquí tienes un completo ejemplo de código para scrapear listados de empleo de LinkedIn usando Python:
Necesitaremos varias librerías de Python:
import requests
from lxml import html
import csv
import random
Empieza por definir la URL de búsqueda de empleo de LinkedIn que quieres scrapear.
url = 'https link'
Para scrapear LinkedIn de forma efectiva, es crucial utilizar las cabeceras correctas, especialmente la cabecera User-Agent, para imitar las peticiones de un navegador real.
user_agents = [
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
]
Los proveedores de proxy modernos suelen soportar la rotación interna, lo que significa que rotan automáticamente las direcciones IP por ti. Esto elimina la necesidad de seleccionar manualmente proxies de una lista. Sin embargo, para fines ilustrativos, aquí está cómo1 usted manejaría la rotación de proxy si fuera necesario:
proxies = {
'http': random.choice(proxies),
'https': random.choice(proxies)
}
El éxito del scraping en LinkedIn depende de la correcta configuración de las cabeceras que emulan el comportamiento de un navegador real. Los encabezados correctamente configurados no sólo ayudan a eludir los sistemas de protección anti-bot, sino que también disminuyen las posibilidades de que tus actividades de scraping sean bloqueadas.
headers = {
'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
'accept-language': 'en-IN,en;q=0.9',
'dnt': '1',
'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="126", "Google Chrome";v="126"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '"Linux"',
'sec-fetch-dest': 'document',
'sec-fetch-mode': 'navigate',
'sec-fetch-site': 'none',
'sec-fetch-user': '?1',
'upgrade-insecure-requests': '1',
}
Para recopilar y almacenar eficazmente la información de las ofertas de empleo, debes empezar por inicializar un almacén de datos. En Python, esto suele implicar la creación de una lista vacía. Esta lista servirá como un contenedor de almacenamiento donde puedes añadir detalles del trabajo a medida que se extraen del contenido HTML. Este método garantiza que la información se recopile sistemáticamente y sea fácilmente accesible para su posterior procesamiento o análisis.
job_details = []
Después de enviar una petición HTTP GET, el siguiente paso es analizar el contenido HTML utilizando la librería lxml. Esto nos permitirá navegar por la estructura HTML e identificar los datos que queremos extraer.
# Establecer User-Agent aleatorio y proxy con método de autorización IP
headers['user-agent'] = random.choice(user_agents)
proxies = {
'http': IP:PORT,
'https': IP:PORT
}
# Enviar una solicitud HTTP GET a la URL
response = requests.get(url=url, headers=headers, proxies=proxies)
parser = html.fromstring(response.content)
Una vez analizado el contenido HTML, podemos extraer detalles específicos del trabajo como el título, el nombre de la empresa, la ubicación y la URL del trabajo mediante consultas XPath. Estos detalles se almacenan en un diccionario y se anexan a una lista.
# Extraer los detalles del trabajo del contenido HTML
for job in parser.xpath('//ul[@class="jobs-search__results-list"]/li'):
title = ''.join(job.xpath('.//div/a/span/text()')).strip()
company = ''.join(job.xpath('.//div/div[2]/h4/a/text()')).strip()
location = ''.join(job.xpath('.//div/div[2]/div/span/text()')).strip()
job_url = job.xpath('.//div/a/@href')[0]
job_detail = {
'title': title,
'company': company,
'location': location,
'job_url': job_url
}
job_details.append(job_detail)
Después de recopilar los datos del trabajo, guárdelos en un archivo CSV.
with open('linkedin_jobs.csv', 'w', newline='', encoding='utf-8') as csvfile:
fieldnames = ['title', 'company', 'location', 'job_url']
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writeheader()
for job_detail in job_details:
writer.writerow(job_detail)
Aquí tienes el código completo, combinando todos los apartados anteriores:
from selenium.webdriver.chrome.options import Options
from seleniumwire import webdriver as wiredriver
from selenium.webdriver.common.by import By
import csv
# Especifique la dirección del servidor proxy con el nombre de usuario y la contraseña
proxy_address = ""
proxy_username = ""
proxy_password = ""
# Configurar las opciones de Chrome con el proxy y la autenticación
chrome_options = Options()
chrome_options.add_argument(f'--proxy-server={proxy_address}')
chrome_options.add_argument(f'--proxy-auth={proxy_username}:{proxy_password}')
# Crear una instancia WebDriver con selenium-wire
driver = wiredriver.Chrome(options=chrome_options)
url = 'https link'
# Realice su automatización Selenium con las capacidades mejoradas de selenium-wire
driver.get(url)
job_details = []
all_elements = driver.find_elements(By.XPATH,
'//*[@id="main-content"]/section/ul/li')
for i in all_elements:
title = i.find_element(By.XPATH,
'.//div/div/h3').text
company = i.find_element(By.XPATH, './/div/div[2]/h4/a').text
location = i.find_element(By.XPATH, './/div/div[2]/div/span').text
job_url = i.find_element(By.XPATH,
'.//div/a').get_attribute('href')
job_detail = {
'title': title,
'company': company,
'location': location,
'job_url': job_url
}
job_details.append(job_detail)
with open('linkedin_jobs.csv', 'w', newline='', encoding='utf-8') as csvfile:
fieldnames = ['title', 'company', 'location', 'job_url']
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writeheader()
for job_detail in job_details:
writer.writerow(job_detail)
driver.quit()
Extraer datos de LinkedIn utilizando Python con las librerías requests y lxml ofrece una potente forma de analizar el mercado laboral y reclutar personal. Para garantizar un proceso de raspado sin problemas, se utilizan proxies de centros de datos con altas velocidades, así como proxies de ISP con un factor de confianza más alto, lo que reduce el riesgo de bloqueos en las acciones automatizadas.
Мы получили вашу заявку!
Ответ будет отправлен на почту в ближайшее время.
С уважением proxy-seller.com!
Comentarios: 0