CoderCastrov logo
CoderCastrov
LinkedIn

Можете ли вы собирать данные с LinkedIn?

Можете ли вы собирать данные с LinkedIn?
просмотров
11 мин чтение
#LinkedIn

Мой путь и процесс исследования в одну холодную зимнюю ночь.

И вот опять наступило это время года. На улице морозно, дни становятся все короче и короче, кажется, что ты живешь в мире, где солнце уехало в отпуск куда-то на юг от того места, где ты сейчас находишься. Ты задаешь себе вопрос: где здесь предел? Сколько слоев носков и свитеров мне нужно надеть, чтобы не замерзнуть?

Я люблю эту пору.

Почему? Потому что, когда тебе приходится оставаться внутри, ты скучаешь. И когда ты скучаешь, у тебя появляются идеи. По крайней мере, у меня так. И я хотел бы поделиться с вами своим самым последним приключением с данными.

Можете ли вы написать скрипт для парсинга данных с LinkedIn?

Все началось с этого вопроса. Честно говоря, вся эта история началась в 2018 году, когда я решил снова заняться программированием в качестве подготовки к моей магистерской диссертации. Если вам интересны мои предыдущие проекты, вы можете найти больше статей на моей странице профиля Medium. Они в основном посвящены анализу социальных сетей, особенно Instagram. И если вы действительно очень увлечены подобными вещами: я опубликовал свою магистерскую диссертацию Influencer Fraud on Instagram — A Descriptive Analysis of the World’s Largest Fake Engagement Community на ResearchGate несколько недель назад.

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

Какие полезные данные можно получить на LinkedIn, теоретически и практически (например, с помощью кодирования)?

Я начинаю просматривать страницу.

Сразу же я думаю о своих коллегах из Университета Мангейма, где я недавно закончил обучение. Где работают мои друзья? Где они сейчас живут? Сразу же LinkedIn показывает отличную сводку о том, где живут и работают выпускники определенного университета.

Эта страница кажется хорошей отправной точкой. Мы уже можем увидеть некоторую сводную статистику, например, работодателей выпускников в ранжированном порядке. Естественно, большинство людей работают на двух местных гигантов SAP и BASF, а также в самом университете.

После этих трех различных консалтинговых фирм следуют, так что я думаю, что мы должны дань нашему университету, который считается питательной средой для консультантов и инвестиционных банкиров. Конечно, это всего лишь выборка и вовсе не является репрезентативной, хотя она может дать представление о наших бизнес-выпускниках. (Хотя некоторые графики в конце этой статьи могут опровергнуть эту теорию).

Еще одна замечательная вещь, которую стоит отметить, это поле выбора года. В данный момент на странице показаны все 42 853 выпускника, которые активны на LinkedIn и окончили университет с 1900 по 2019 год.

Прокрутка вниз показывает список профилей выпускников LinkedIn.

Хорошо, с этими тремя вещами мы можем теоретически создать два исследовательских проекта:


Проект 1: Сетевой график общих карьерных путей

Давайте начнем с теории. Для первого проекта нам понадобится скрипт, который входит в систему LinkedIn, посещает страницу выпускников Университета Мангейма, автоматически прокручивает страницу вниз для загрузки новых профилей, а затем создает список всех URL-адресов страниц LinkedIn выпускников. После составления этого списка URL-адресов нам понадобится второй скрипт, который посещает каждый профиль, чтобы получить информацию о их индивидуальных карьерных путях.

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

Вот простой пример индивидуальных и комбинированных карьерных путей.

Example 1 Example 2 Example 3 Example 4 Example 5

Если бы мы смогли получить резюме всех выпускников Мангеймского университета на LinkedIn, мы бы не только смогли увидеть, какие работодатели являются самыми популярными, но и смогли бы выявить тенденции и общие пути. Например, будет ли удивительно обнаружить, что люди из технологической компании переходят в технологическую консалтинговую компанию? Из одного гиганта FMCG в другой?

Замечательное свойство сетевых графиков заключается в том, что мы мгновенно видим появление узоров. Ранее я работал с сетевыми графиками, когда анализировал связь связанных хэштегов в Instagram.

Хорошо, цель поставлена, процесс ясен - теперь пришло время написать скрипт.

Я начинаю с анализа настроек LinkedIn с использованием Chrome и расширения SelectorGadget, которое очень помогает определить правильные элементы страницы. Вместо простого парсинга HTML, как я делал раньше для Instagram (ССЫЛКА), я решаю использовать Selenium для автоматизации Chrome. Я решаю использовать R Studio в качестве предпочитаемой среды, хотя то же самое легко доступно в Python. Поэтому я использую пакет RSelenium для этого.

Поскольку LinkedIn работает должным образом только при входе в систему, и я не хочу рисковать своей реальной учетной записью для этого игрушечного проекта, я решаю создать фиктивную учетную запись. В настоящее время скрипт может посещать LinkedIn, входить в систему, запрашивать страницу выпускников Мангейма и затем начинает парсить имена выпускников. Чтобы получить больше имен, скрипт отправляет клавишу со стрелкой вниз (эквивалент прокрутки) для загрузки дополнительных профилей.

К этому моменту у меня должно быть сотни имен, так как мой скрипт получил сотни элементов имени. Однако, когда я печатаю имена для проверки моего скрипта, я могу найти только несколько десятков. Почему?

К сожалению, проект оказывается не таким простым, как я думал. Быстрый взгляд на Chrome показывает, что LinkedIn предоставляет только имя для некоторых выпускников. Большинство имен заменяются на "Участник LinkedIn", и ссылки на их профили отключены.

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

Я передаю свое недоумение Google. Оказывается, что LinkedIn показывает только имя людей, с которыми вы связаны в некоторой степени. Люди, находящиеся на расстоянии более 3 степеней, не будут отображаться. Естественно, поскольку LinkedIn - успешная прибыльная компания, которую Microsoft приобрел несколько лет назад за огромные деньги ($26 млрд!!!), они могут предлагать возможность платить за больше данных.

Конечно, есть такая услуга. Она называется LinkedIn Sales Navigator. Может быть, я могу получить тестовую учетную запись для этого?

Я почти нажимаю на кнопку завершения регистрации на пробный период. Однако я решаю сначала прочитать еще немного. Оказывается, что даже с подпиской на LinkedIn Sales Navigator Professional вы не можете пройти дальше, чем на 3 степени от вашей сети.

Хорошие новости для пользователей, так как это отличная мера безопасности. Плохие новости для нашего проекта, однако.

Мое исследование продолжается. Я узнаю, что некоторые планы позволяют использовать так называемые "разблокировки вне сети", например, решение Sales Navigator Team, которое стоит $1,240 без учета налогов за лицензию. Огромная сумма денег за такой простой проект. Решив заплатить, вы получите - вы сидите? - 25 (ДВАДЦАТЬ ПЯТЬ!!!!) разблокировок вне сети в месяц. Это здорово. Это фактически несколько сотен долларов за разблокированный профиль. Конечно, исследователи здесь не являются целевой группой.

Ну что ж, мне приходится смириться с тем, что проект 1 мертв. Если я использую свой реальный профиль, я смогу получить данные для нескольких сотен выпускников. Я все равно смогу написать функциональный скрипт в качестве доказательства концепции и создать сетевой график на основе образцовых данных. Но если честно, я слишком расстроен этим ограничением, чтобы продолжать в данный момент. Поэтому я перейду к следующему проекту.

Проект 2: Выбор работодателя со временем

Второй проект может показаться менее интересным, чем первый. Однако, поскольку он использует бесплатные функции LinkedIn, вероятность успеха здесь намного выше. Мне все равно интересно увидеть, сможем ли мы найти интересные результаты, сравнивая, как выбор работодателей моих коллег менялся со временем. К счастью, LinkedIn уже предоставляет удобный интерфейс для получения этих данных. Мы даже можем использовать фильтры, чтобы решить, для какого года выпуска мы хотим получить данные.

Step 1: One large string

После использования того же процесса, что и раньше (т.е. анализ структуры веб-сайта), я создаю скрипт, который устанавливает фильтр на год выпуска с 2000 по 2019 и получает топ-работодателей для каждого года выпуска.

Звучит просто, верно? Но у меня возникают проблемы. LinkedIn позволяет мне получить только текст таблицы в неструктурированной форме, вот так:

Step 2: Split into smaller strings, each showing data for one employer

У меня есть одна большая строка, но я хочу получить ясно структурированную таблицу. Сначала я разделяю строку по символу "\n", что означает новую строку. Результатом является список более мелких строк, каждая из которых соответствует работодателю и количеству выпускников, работающих там.

Step 3: the final table

Перебирая каждую подстроку, я извлекаю количество выпускников и соответствующую компанию. Затем я объединяю два новых списка в одну таблицу, выглядящую так.

Теперь это нужно сделать для следующего года, и следующего года... Поэтому я выполняю цикл через весь процесс и сохраняю каждую таблицу для следующего шага. Это занимает одну или две минуты для завершения.

пьет кофе

Хорошо, теперь у меня есть 19 таблиц для лет с 2000 по 2019, и мне нужно объединить их таким образом, чтобы показать общую картину. Следовательно, мне нужна большая таблица.

Работодатели в каждой таблице разные, что означает, что каждая отдельная таблица имеет разную структуру и разные названия столбцов. Для некоторых лет компания X вообще не появляется. Использование dplyr::bind_rows позволяет мне создать большую сводную таблицу с NA для лет без данных. Заменяя NA на 0 и преобразуя символьные числа в реальные числа, таблица выглядит так:

Теперь к интересной части: визуализации данных.

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

Сравнение двух крупнейших работодателей, близких к нашему университету, указывает на то, что SAP, кажется, увеличил свои усилия по найму в последние годы, в то время как BASF осталась более или менее стабильной, по крайней мере, в отношении выпускников Мангеймского университета с профилями на LinkedIn.

Некоторые работодатели, такие как Deutsche Bank, кажется, либо сокращают найм, либо перестают быть интересными для выпускников Мангеймского университета по сравнению с предыдущими годами. То же самое можно сказать о Siemens и Roche, но в более крайней степени.

В этой точке мне нужно отметить, что 0 не означает, что ни один выпускник не работает в этой компании. 0 просто означает, что компания не входит в топ-15 для конкретного периода времени. LinkedIn не предоставляет данных ниже этого порога. Тем не менее, отсутствие данных показывает относительную незначительность по сравнению с другими компаниями в каждом году.

Daimler также интересный случай. Он был одним из крупнейших работодателей выпускников Мангеймского университета несколько лет назад, но заметно сократил свои усилия по найму до стабильного, но значительно более низкого уровня (-50% от пика в 2015 году). Автомобильные компании будут интересно отслеживать в ближайшие годы, так как для этой отрасли грозят крупные изменения.

Теперь давайте посмотрим на сам университет.

Моя первая реакция: Молодцы, Университет Мангейма! Нанимайте и удерживайте больше наших отличных выпускников! Однако, чем больше я об этом думаю, тем страннее это выглядит. О нет, я думаю, что только что обнаружил фундаментальную ошибку в своем мышлении.

Я вижу две потенциальные проблемы здесь.

Во-первых: Может ли быть так, что LinkedIn не показывает, где выпускники работали в году X, а где они работают сейчас? Это объяснило бы графики, наклоненные вправо, как в случае с Университетом Мангейма. Однако этот шаблон не распространяется на большинство графиков для этой выборки.

Во-вторых: Мы должны помнить, что LinkedIn как платформа стал популярным в Германии только в последние несколько лет. Так что это не (только) означает, что выпускников стало гораздо больше, чем в начале 2000-х годов, но больше людей делятся информацией о своей карьере на LinkedIn.

Хорошо, второй аргумент серьезно подрывает достоверность и представительность данных. Но мы знали это с самого начала. Однако это не аргумент против сравнения различных графиков.

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

Резюме

Давайте начнем с ответа на вопросы, поставленные в заголовке этой статьи: да, с помощью пользовательских скриптов на R или Python и Selenium можно собирать данные с LinkedIn. Легко ли это? Нет! Проект 1 показывает, что LinkedIn не делится всеми данными, предоставленными пользователем, публично, даже если их профили установлены как публичные.

Однако все еще можно найти и собрать интересные общедоступные данные. Проект 2 предназначен для отслеживания изменений в интересах работодателей выпускников Университета Мангейма за 19 лет. С помощью некоторых модификаций текста и восстановления таблицы, которая резюмирует нужную информацию, удалось собрать эти данные.

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

Кроме того, я хотел бы отметить, что, конечно, все это не было научным исследованием поведения сотрудников или структурой карьеры выпускников Мангейма!

Помимо проблемы, описанной в предыдущем абзаце, в данных есть подтекст: LinkedIn стал популярным среди немцев только в последние несколько лет. Мы не должны путать растущее количество выпускников, предоставленных LinkedIn, как показатель реального роста числа выпускников. Следовательно, это не может представлять развитие усилий работодателей по найму со временем честным образом. Так что будьте осторожны с приведенными выше графиками!

Надеюсь, эта статья дала вам хорошее представление о моем процессе парсинга веб-страниц и о том, как я справляюсь с трудностями. Хотя процесс был реальным, я решил добавить некоторые элементы повествования, чтобы сделать его более привлекательным. Дайте мне знать, как вам это понравилось!

Не стесняйтесь следовать моему профилю на Medium, чтобы получать обновления о новых публикациях по Data Science, парсингу веб-страниц, программном обеспечении автоматизации и исследованиях мошенничества влиятелей. Вы можете связаться со мной через LinkedIn или Twitter, если хотите поговорить о моих исследованиях. Я всегда рад помочь!

Спасибо за чтение,

Йонас Шрёдер