ОГЛАВЛЕНИЕ
- Введение
- Процедура
- Настройка среды
- Образцы скраппинга
- Процесс веб-скрапинга
- Заключение
Введение
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.
ipython
from selenium import webdriver
from selenium.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
driver.get("https://www.linkedin.com")
В результате в окне chrome появится страница входа в систему LinkedIn, а главное — баннер с сообщением, приведенным ниже.
Chrome управляется автоматической программой.
- Далее нам нужно войти в LinkedIn с помощью автоматизации, для этого мы сообщим нашему боту, что ему нужно предоставить информацию для входа. Для этого мы воспользуемся инструментом chrome dev tool и получим идентификаторы полей входа. Для доступа к этому инструменту мы используем комбинацию клавиш Ctrl+Shift+i или f12, чтобы открыть инструмент разработчика.
Теперь нажмите на обведенный значок Inspect Elements, вы можете навести курсор на любой элемент на веб-странице, код появится выделенным, как показано выше. Вам нужно найти атрибуты class и id.
Now click on the circled Inspect Elements icon, you can hover over any element on the web page the code will appear highlighted as seen above. You want to look for the class and id attributes.
Отсюда вы попадете в свой профиль 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)
Думаю, вы заметили, что результат не тот, который вы хотели получить. Мы хотим получить URL профилей LinkedIn. Чтобы получить URL, нам нужно использовать метод get_attribute и некоторые дополнительные специи. Давайте используем новую переменную для хранения URL.
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]
Мы получили URL профилей linkedin, а это значит, что теперь мы можем начать собирать данные (имя, должность, компания, местоположение, URL профиля и многое другое).
На следующих шагах мы перейдем к более сложной задаче, но будем использовать те же методы и переменные, что и раньше.
Процесс веб-скрапинга
Теперь нам нужны некоторые файлы для создания нашего скрепера. В каталоге вашего проекта создайте файлы следующим образом.
touch variables.py main.py
# Creates two files with the names above
variables.py
my_username = 'your email address' my_password = 'your passwowrd'
имя_файла = ‘results.csv’ # файл, в котором будут сохранены результаты
query = ‘site:linkedin.com/in/ AND «Web» AND «Javascript»‘
> Variables files contains the variables that we'll use to login to LinkedIn together with the query.
We'll use the main.py file to run the main code.
> main.py
```python 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]
This process is fast at times and to slow it down, use the sleep function from the time function and it can used at anytime in the code.
from time import sleep
sleep(2)
The process is summarised as seen below:
1. Login to LinkedIn
2. Making the google search query and submit
3. Getting the different displayed profiles in a list profile_urls
4. Iterate over the list with the new URL as index
5. Get the profile URL and open the profile page
6. Get the name, title, company, location and more from the profile page
7. Save the results to a csv file
We're done.
## Conclusion
As you can see, we've made a scraper that can scrape the data from LinkedIn. We've used the following technologies:
* Selenium
* Python
* Ipython
> Note: From time to time, LinkedIn change their class and attributes, so for future releases, I'll try to update the scraper to work with the new LinkedIn changes. Or you can try to use the LinkedIn API to get the data.