Как создать свой собственный LinkedIn Profile Scraper в 2022 году


Введение

LinkedIn — это крупнейшая профессиональная сеть в интернете, доступная через мобильный или веб-сайт для поиска работы, стажировки и расширения своей сети. На LinkedIn вы можете найти людей с похожими навыками, интересами и опытом. Чтобы получить доступ к платформе, необходимо зарегистрироваться и создать профиль.

На Linkedin вы можете искать работу, стажировки и людей с похожими навыками, интересами и опытом. Что вы скажете об автоматизации этого процесса поиска? Это позволит нам перейти к веб-скрейпингу.

Веб-скрейпинг в основном используется на сайтах с большими данными, таких как Google, Amazon или Twitter. В целом, веб-скрейпинг — это извлечение данных с веб-сайта. Эта информация собирается и затем экспортируется в формат, который более полезен для пользователя, в основном это файл csv, хотя возможны и другие форматы, например json.

Ниже приводится руководство по созданию скрепера на языке python, который можно использовать для извлечения данных из LinkedIn.

Процедура

Хотя скраппинг — это в основном процесс автоматизации, это широкий процесс, который можно разбить на несколько шагов.

Настройка среды

Python — это язык, выбранный для этого учебника, и, как вы можете догадаться, необходимо принять некоторые меры предосторожности, чтобы убедиться, что среда настроена правильно. Основной ОС, которую я буду использовать, является Ubuntu (дистрибутив Linux) Виртуальная среда — это инструмент, который помогает вам изолировать ваш код от остальной системы. Это хорошая идея — создать виртуальную среду для вашего проекта.

  • Создайте новый каталог на рабочем столе и войдите в него.
  # create the directory
  mkdir linkedin_scraper

  # cd into the directory
  cd linkedin_scraper
Войдите в полноэкранный режим Выйдите из полноэкранного режима
  • Чтобы создать виртуальную среду, выполните следующую команду:
  python -m venv venv
  # or
  python3 -m venv venv
Войти в полноэкранный режим Выйти из полноэкранного режима
  • Чтобы активировать виртуальную среду, выполните следующую команду:
# For linux and mac users
source venv/bin/activate
Ввести полноэкранный режим Выйти из полноэкранного режима
# For windows users
.venvScriptsactivate
Войти в полноэкранный режим Выйти из полноэкранного режима
  • Установите следующие пакеты:
pip install ipython selenium parsel pip-chill
Войти в полноэкранный режим Выйти из полноэкранного режима

Проверьте установленные пакеты с помощью следующей команды:

# To list only the main packages installed in the virtual environment, run the following command:

pip-chill
Войти в полноэкранный режим Выйти из полноэкранного режима
  • Для этого процесса автоматизации мы будем использовать ipython, который представляет собой оболочку python. Это хорошая идея использовать ее для запуска процесса автоматизации. В терминале введите следующую команду:
ipython
Войти в полноэкранный режим Выйти из полноэкранного режима

Вывод

Примечание: В качестве альтернативы для этого процесса можно использовать блокнот jupyter или файл python. ipython был выбран, так как это хорошая оболочка и она проста в использовании без особых предварительных требований и интерактивных результатов.

Наша среда настроена, и мы готовы к работе.

Образцы для скраппинга

Чтобы получить доступ к данным linkedin, нам необходимо войти в систему, поэтому мы автоматизируем и эту функцию. Для автоматизации процесса входа мы будем использовать пакет selenium вместе с драйверами chrome. Выполните эти команды в вашей IDE.

В результате у вас появится окно, в котором будет страница входа в LinkedIn, и, прежде всего, в нем должен быть баннер с сообщением, приведенным ниже.

Chrome is being contrrolled by an automated software.
Как показано ниже:

  • Далее нам нужно войти в LinkedI с помощью автоматизации, для этого мы скажем нашему боту, что ему нужно предоставить данные для входа. Для этого мы воспользуемся инструментом chrome dev и получим идентификаторы полей входа. Для доступа к этому инструменту мы используем комбинацию клавиш Ctrl+Shift+i или f12, чтобы открыть инструмент разработчика.

На изображении ниже показан инструмент разработчика и показаны поля входа с их идентификаторами, повторите то же самое в окне браузера prompter.

Теперь нажмите на обведенную иконку Inspect Elements, вы можете навести курсор на любой элемент на веб-странице, код появится выделенным, как показано выше. Вам нужно найти атрибуты class и id.


from selenium.webdriver.common.by import By

# Setting the variables for the login fields
username = driver.find_element(By.CLASS_NAME, 'input__input')

username.send_keys('Your Linkedin Email')

password = driver.find_element(By.ID, 'session_password')

password.send_keys('Your Linkedin Password') 

# Clicking on the login button
log_in_button = driver.find_element(By.CLASS_NAME, 'sign-in-form__submit-button')
log_in_button.click()

Войдите в полноэкранный режим Выйти из полноэкранного режима

Fronm здесь, вы будете направлены на свой профиль LinkedIn. Угадайте что, вы успешно автоматизировали процесс входа в систему.

  • Далее мы хотим сделать поисковый запрос в google, который будет нацелен на все профили LinkedIn, соответствующие пунктам «Web» и «Javascript» в их профиле.

  • Заходим в google, все еще используя терминал, так что наш автоматизированный браузер chrome будет использоваться.

# To open the google search page
driver.get('https://www.google.com')
Войдите в полноэкранный режим Выйти из полноэкранного режима

Сделаем наш запрос и нажмем на кнопку поиска (это делается в терминале).

search_query = driver.find_element(By.NAME,'q')

search_query.send_keys('site:linkedin.com/in/ AND "Web" AND "Javascript"')

from selenium.webdriver.common.keys import Keys

earch_query.send_keys(Keys.ENTER)
Войти в полноэкранный режим Выход из полноэкранного режима

Поиск может быть настроен, не стесняйтесь изменять его по своему усмотрению.

Теперь у нас есть эти результаты.

Как видно выше, для получения класса мы используем тот же метод, что и раньше.

linkedin_users_urls = driver.find_elements(By.CLASS_NAME, 'iUh30')
Войти в полноэкранный режим Выход из полноэкранного режима

Примечание: Имя класса iUh30 и это имя класса ссылки, которая содержит url профиля LinkedIn.
Примечание: Имя метода, который мы используем сейчас, find_elements и это метод, который используется для получения всех элементов определенного класса. А не метод find_element, который получает элемент.

Давайте проверим, есть ли у нас результаты. Мы будем использовать функцию len для получения длины списка.

len(linkedin_users_urls)
Вход в полноэкранный режим Выход из полноэкранного режима

Думаю, вы заметили, что возврат не тот, который вы хотели. Мы хотим получить урлы профилей linkedin. Чтобы получить урлы, нам нужно использовать метод get_attribute и некоторые дополнительные специи. Давайте используем новую переменную для хранения урлов.

linkedin_users_urls_list = driver.find_elements(By.XPATH, '//div[@class="yuRUbf"]/a[@href]')

# To check the list content we run the following command
[users.text for users in linkedin_users_urls_list]
Вход в полноэкранный режим Выйти из полноэкранного режима

Результат будет выглядеть следующим образом:

hohohoho, мы получили урлы профилей linkedin, что означает, что теперь мы можем приступить к сбору данных (имя, должность, компания, местоположение, урл профиля и многое другое).

На следующих шагах мы приступим к более сложной задаче, но будем использовать те же методы и переменные, что и раньше.

Процесс веб-скрапинга

Теперь нам нужны некоторые файлы для создания нашего скрепера. В каталоге вашего проекта создайте файлы следующим образом.

touch variables.py main.py
# Creates two files with the names above
Вход в полноэкранный режим Выход из полноэкранного режима

variables.py

my_username = 'your email address'
my_password = 'your passwowrd'

file_name = 'results.csv' # file where the results will be saved

query = 'site:linkedin.com/in/ AND "Web" AND "Javascript"'

Файлы переменных содержат переменные, которые мы будем использовать для входа в LinkedIn вместе с запросом.

Мы будем использовать файл main.py для запуска основного кода.

main.py

import variables
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys

driver.get(variables.query) # google search
username.send_keys(variables.username) # username field
password.send_keys(linkedin_password) # password field
linkedin_users_urls_list = driver.find_elements(By.XPATH, '//div[@class="yuRUbf"]/a[@href]')
[users.text for users in linkedin_users_urls_list]

Этот процесс временами происходит быстро, и чтобы замедлить его, используйте функцию sleep из функции time, ее можно использовать в любое время в коде.


python
from time import sleep
sleep(2)


Вход в полноэкранный режим Выход из полноэкранного режима

Краткое описание процесса приведено ниже:

  1. Войдите в linkedin
  2. Выполнение поискового запроса в Google и отправка запроса
  3. Получение различных отображаемых профилей в списке profile_urls
  4. Итерация по списку с новым url в качестве индекса
  5. Получение url профиля и открытие страницы профиля
  6. Получение имени, должности, компании, местоположения и других данных со страницы профиля
  7. Сохраните результаты в файл csv

Мы закончили.

Полный код

Полный исходный код доступен на GitHub, не стесняйтесь давать мне звезду, создавать проблемы, делать запросы на исправление и давайте продвигать сообщество opensource.

Заключение

Как вы видите, мы сделали скрепер, который может скрести данные из LinkedIn. Мы использовали следующие технологии:

  • Selenium
  • Python
  • Ipython

Примечание: Время от времени Linkedin меняет свои классы и аттреибуты, поэтому в будущих выпусках я постараюсь обновить скрепер, чтобы он работал с новыми изменениями Linkedin. Или вы можете попробовать использовать Linkedin API для получения данных.

Оцените статью
devanswers.ru
Добавить комментарий