L'exploitation des données de LinkedIn peut s'avérer extrêmement précieuse pour plusieurs raisons :
L'article mettra l'accent sur des techniques et des stratégies importantes, notamment sur l'importance d'éviter la détection via les proxys et les en-têtes. La bibliothèque requests sera utilisée pour effectuer des requêtes HTTP, tandis que lxml sera employé pour analyser le contenu HTML.
Avant de commencer, assurez-vous que Python est installé sur votre machine.
Installez les bibliothèques nécessaires à l'aide de pip :
pip install requests
pip install lxml
Voici un exemple de code complet pour le scraping des listes d'emploi de LinkedIn à l'aide de Python :
Nous aurons besoin de plusieurs bibliothèques Python :
import requests
from lxml import html
import csv
import random
Commencez par définir l'URL de recherche d'emploi LinkedIn que vous souhaitez récupérer.
url = 'https link'
Pour scraper efficacement LinkedIn, il est essentiel d'utiliser les bons en-têtes, en particulier l'en-tête User-Agent, afin d'imiter les requêtes provenant d'un véritable navigateur.
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'
]
Les fournisseurs de proxy modernes prennent souvent en charge la rotation interne, ce qui signifie qu'ils effectuent automatiquement la rotation des adresses IP pour vous. Il n'est donc pas nécessaire de sélectionner manuellement des serveurs mandataires à partir d'une liste. Toutefois, à titre d'exemple, voici comment1 vous pourriez gérer la rotation des serveurs mandataires en cas de besoin :
proxies = {
'http': random.choice(proxies),
'https': random.choice(proxies)
}
Le succès du scraping sur LinkedIn dépend de la configuration correcte des en-têtes qui émulent le comportement d'un vrai navigateur. Des en-têtes correctement configurés permettent non seulement de contourner les systèmes de protection anti-bots, mais aussi de réduire les risques de blocage de vos activités de scraping.
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',
}
Pour collecter et stocker efficacement les informations relatives aux offres d'emploi, vous devez commencer par initialiser un magasin de données. En Python, cela implique généralement la création d'une liste vide. Cette liste servira de conteneur de stockage où vous pourrez ajouter les détails de l'offre d'emploi au fur et à mesure qu'ils sont extraits du contenu HTML. Cette méthode garantit que les informations sont systématiquement collectées et facilement accessibles pour un traitement ou une analyse ultérieurs.
job_details = []
Après avoir envoyé une requête HTTP GET, l'étape suivante consiste à analyser le contenu HTML à l'aide de la bibliothèque lxml. Cela nous permettra de naviguer dans la structure HTML et d'identifier les données que nous voulons extraire.
# Définir un User-Agent aléatoire et un proxy avec la méthode d'autorisation IP
headers['user-agent'] = random.choice(user_agents)
proxies = {
'http': IP:PORT,
'https': IP:PORT
}
# Envoyer une requête HTTP GET à l'URL
response = requests.get(url=url, headers=headers, proxies=proxies)
parser = html.fromstring(response.content)
Une fois le contenu HTML analysé, nous pouvons extraire des informations spécifiques sur l'emploi, telles que le titre, le nom de l'entreprise, le lieu et l'URL de l'emploi, à l'aide de requêtes XPath. Ces détails sont stockés dans un dictionnaire et ajoutés à une liste.
# Extraire les détails de l'emploi à partir du contenu 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)
Après avoir collecté les données relatives aux travaux, enregistrez-les dans un fichier 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)
Voici le code complet, combinant toutes les sections ci-dessus :
from selenium.webdriver.chrome.options import Options
from seleniumwire import webdriver as wiredriver
from selenium.webdriver.common.by import By
import csv
# Spécifier l'adresse du serveur proxy avec le nom d'utilisateur et le mot de passe
proxy_address = ""
proxy_username = ""
proxy_password = ""
# Configurer les options de Chrome avec le proxy et l'authentification
chrome_options = Options()
chrome_options.add_argument(f'--proxy-server={proxy_address}')
chrome_options.add_argument(f'--proxy-auth={proxy_username}:{proxy_password}')
# Créer une instance de WebDriver avec selenium-wire
driver = wiredriver.Chrome(options=chrome_options)
url = 'https link'
# Réalisez vos automatisations Selenium avec les capacités améliorées 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()
L'extraction de données de LinkedIn à l'aide de Python avec les bibliothèques requests et lxml offre un moyen puissant d'analyser le marché de l'emploi et de recruter du personnel. Pour garantir un processus de scraping fluide, des proxys de centres de données à haute vitesse sont utilisés, ainsi que des proxys de fournisseurs d'accès Internet avec un facteur de confiance plus élevé, ce qui réduit le risque de blocage des actions automatisées.
Мы получили вашу заявку!
Ответ будет отправлен на почту в ближайшее время.
С уважением proxy-seller.com!
Commentaires: 0