A raspagem de dados do LinkedIn pode ser incrivelmente valiosa por vários motivos:
O artigo enfatizará técnicas e estratégias importantes, incluindo a importância de evitar a deteção via proxies e cabeçalhos em primeiro lugar. A biblioteca requests será usada para fazer solicitações HTTP, enquanto a lxml será empregada para analisar o conteúdo HTML.
Antes de começar, certifique-se de que tem o Python instalado na sua máquina.
Instale as bibliotecas necessárias usando pip:
pip install requests
pip install lxml
Aqui está um exemplo de código abrangente para raspar as listagens de empregos do LinkedIn usando Python:
Vamos precisar de várias bibliotecas Python:
import requests
from lxml import html
import csv
import random
Comece por definir o URL de pesquisa de emprego do LinkedIn que pretende extrair.
url = 'https link'
Para extrair o LinkedIn de forma eficaz, é crucial usar os cabeçalhos corretos, especialmente o cabeçalho User-Agent, para imitar solicitações de um 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'
]
Os fornecedores de proxy modernos suportam frequentemente a rotação interna, o que significa que rodam automaticamente os endereços IP por si. Isto elimina a necessidade de selecionar manualmente proxies a partir de uma lista. No entanto, para fins ilustrativos, eis como1 poderia lidar com a rotação de proxy, se necessário:
proxies = {
'http': random.choice(proxies),
'https': random.choice(proxies)
}
O scraping bem-sucedido do LinkedIn depende da configuração correta dos cabeçalhos que emulam o comportamento de um navegador real. Cabeçalhos configurados corretamente não só ajudam a contornar os sistemas de proteção anti-bot, mas também diminuem as chances de suas atividades de raspagem serem 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 recolher e armazenar eficazmente informações de anúncios de emprego, deve começar por inicializar um armazenamento de dados. Em Python, isso normalmente envolve a criação de uma lista vazia. Esta lista servirá como um contentor de armazenamento onde pode adicionar detalhes da oferta de emprego à medida que são extraídos do conteúdo HTML. Esse método garante que as informações sejam coletadas sistematicamente e facilmente acessíveis para processamento ou análise posterior.
job_details = []
Depois de enviar uma solicitação HTTP GET, a próxima etapa é analisar o conteúdo HTML usando a biblioteca lxml. Isso nos permitirá navegar pela estrutura HTML e identificar os dados que queremos extrair.
# Definir User-Agent aleatório e proxy com método de autorização IP
headers['user-agent'] = random.choice(user_agents)
proxies = {
'http': IP:PORT,
'https': IP:PORT
}
# Enviar um pedido HTTP GET para o URL
response = requests.get(url=url, headers=headers, proxies=proxies)
parser = html.fromstring(response.content)
Depois que o conteúdo HTML é analisado, podemos extrair detalhes específicos do trabalho, como título, nome da empresa, local e URL do trabalho usando consultas XPath. Esses detalhes são armazenados em um dicionário e anexados a uma lista.
# Extrair detalhes da tarefa do conteúdo 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)
Depois de recolher os dados do trabalho, guarde-os num ficheiro 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)
Aqui está o código completo, combinando todas as secções acima:
from selenium.webdriver.chrome.options import Options
from seleniumwire import webdriver as wiredriver
from selenium.webdriver.common.by import By
import csv
# Especificar o endereço do servidor proxy com nome de utilizador e palavra-passe
proxy_address = ""
proxy_username = ""
proxy_password = ""
# Configurar as opções do Chrome com o proxy e a autenticação
chrome_options = Options()
chrome_options.add_argument(f'--proxy-server={proxy_address}')
chrome_options.add_argument(f'--proxy-auth={proxy_username}:{proxy_password}')
# Criar uma instância WebDriver com selenium-wire
driver = wiredriver.Chrome(options=chrome_options)
url = 'https link'
# Realize a sua automatização Selenium com as capacidades melhoradas do 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()
A extração de dados do LinkedIn utilizando Python com as bibliotecas requests e lxml oferece uma forma poderosa de analisar o mercado de trabalho e recrutar pessoal. Para garantir um processo de raspagem sem problemas, são utilizados proxies de datacenter com velocidades elevadas, bem como proxies ISP com um fator de confiança mais elevado, o que reduz o risco de bloqueios em acções automatizadas.
Мы получили вашу заявку!
Ответ будет отправлен на почту в ближайшее время.
С уважением proxy-seller.com!
Comentários: 0