парсинг стены вконтакте python

Анализ дружеских связей VK с помощью Python

Совсем недавно на Хабре появилась статья о реализации дружеских связей в ВКонтакте с помощью Wolfram Mathematica. Идея мне понравилась, и, естественно, захотелось сделать такой же граф, используя Python и d3. Вот, что из этого получилось.

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

Создание и авторизация приложения

Чтобы получить доступ к API ВКонтакте, нам необходимо создать Standalone-приложение, после чего мы сможем использовать нужные нам методы API, которые будут описаны далее. Приложение создается здесь — выберем Standalone-приложение. Нас попросят ввести код-подтверждения, высланный на мобильный, после чего мы попадем на страницу управления приложением. На вкладке Настройки нам пригодится ID приложения для получения access_token.
Далее нам надо авторизовать наше приложение. Этот процесс состоит из 3х этапов.

Аутентификации пользователя на сайте ВКонтакте

Для этого сформируем url, как показано ниже:

парсинг стены вконтакте python. Смотреть фото парсинг стены вконтакте python. Смотреть картинку парсинг стены вконтакте python. Картинка про парсинг стены вконтакте python. Фото парсинг стены вконтакте python

APP_ID – идентификатор Вашего приложения;
PERMISSIONS – запрашиваемые права доступа приложения;
DISPLAY – внешний вид окна авторизации, поддерживаются: page, popup и mobile.
REDIRECT_URI – адрес, на который будет передан access_token.
API_VERSION – версия API, которую Вы используете.

В нашем случае PERMISSIONS — это доступ к друзьям и к API в любое время со стороннего сервера (бессрочный токен). Если адрес сформирован правильно, нам предложат ввести логин и пароль.

Разрешение доступа к своим данным

парсинг стены вконтакте python. Смотреть фото парсинг стены вконтакте python. Смотреть картинку парсинг стены вконтакте python. Картинка про парсинг стены вконтакте python. Фото парсинг стены вконтакте python

Получение access_token

После авторизации приложения клиент будет перенаправлен на REDIRECT_URI. Нужная нам информация будет заключена в ссылке.

Редактируем файл settings.py, вставляя туда полученные access_token и user_id. Теперь мы можем осуществлять запросы к API ВКонтакте.

Получение данных

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

Поскольку нужна хоть какая-то информация об id пользователя, по которому будет строиться граф, нам пригодиться users.get. Он принимает как один id, так и несколько, список полей, информация из которых нам необходима, а также падеж, в котором будет склоняться фамилия и имя. Мой метод base_info() получает список id и возвращает информацию о пользователе с фотографией.

Это может быть важно для тех, кто захочет отправлять в него id из friends.getMutual, таким образом произведя на свет огромное число запросов. Об этом позже.
Теперь нам надо получить информацию о друзьях пользователя, в чем нам и поможет метод friends.get. Из всех его параметров, перечисленных в документации, используем user_id, который находится в нашем setting.py и fields. Дополнительными полями будут id друзей, их имена, фамилии и фотографии. Ведь хочется, чтобы в узлах были миниатюры их фотографий.

Далее наступает самое интересное.
Список id общих друзей между двумя пользователями возвращает метод friends.getMutual. Это хорошо, потому что мы получаем только id, а более расширенная информация у нас уже есть, благодаря friends.get. Но никто не запрещает сделать вам лишнюю сотню-другую запросов, используя users.get. Схемы расположены чуть-чуть пониже.
Теперь определимся, как будем использовать friends.getMutual. Если у пользователя N-друзей, то надо сделать N-запросов, чтобы по каждому другу мы получили список общих друзей. К тому же нам надо будет делать задержки, чтобы у нас было допустимое количество запросов в секунду.
Предположим, что у сканируемого нами id есть 25 друзей.

парсинг стены вконтакте python. Смотреть фото парсинг стены вконтакте python. Смотреть картинку парсинг стены вконтакте python. Картинка про парсинг стены вконтакте python. Фото парсинг стены вконтакте python

парсинг стены вконтакте python. Смотреть фото парсинг стены вконтакте python. Смотреть картинку парсинг стены вконтакте python. Картинка про парсинг стены вконтакте python. Фото парсинг стены вконтакте python

парсинг стены вконтакте python. Смотреть фото парсинг стены вконтакте python. Смотреть картинку парсинг стены вконтакте python. Картинка про парсинг стены вконтакте python. Фото парсинг стены вконтакте python

И тут нам пригодится execute, который позволит запустить последовательность методов. У него есть единственный параметр code, он может содержать до 25 обращений к методам API.
То есть в итоге код в VKScript будет примерно таким:

Найдитесь те, кто напишет, как сократить данный код, не используя все время API.friends.getMutual.
Теперь нам надо всего лишь отправлять партиями id друзей по 25 в каждой. На нашем примере схема будет выглядеть так:

парсинг стены вконтакте python. Смотреть фото парсинг стены вконтакте python. Смотреть картинку парсинг стены вконтакте python. Картинка про парсинг стены вконтакте python. Фото парсинг стены вконтакте python

А ведь мы могли с помощью for отправлять каждого друга в friends.getMutual, а потом еще узнавать более детальную информацию через users.get.
Далее составим человеко понятную структуру, где уже вместо id друга и списка id ваших общих друзей, будет информация из friends.get. В итоге получим нечто вроде:

В словарях находится id, имя, фамилия, фото, в списках — словари общих друзей, если общих друзей нет, то None. Кортежами все это разделяется.

Итак, если хочется посмотреть свой список друзей и общих с ними друзей, запускаем:

Визуализация графа

Выбор пал на d3, а именно на Curved Links. Для этого надо сгенерировать json, который будет примерно такого содержания:

Немного видоизменяя index.html, узлами становятся фотографии друзей.

Если хочется сразу визуализировать граф:

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

Так выглядит граф дружеских связей одного из моих друзей. Связи — это все.

парсинг стены вконтакте python. Смотреть фото парсинг стены вконтакте python. Смотреть картинку парсинг стены вконтакте python. Картинка про парсинг стены вконтакте python. Фото парсинг стены вконтакте python

Конечно, мне было интересно, у кого работает быстрее.

В статье, которая меня вдохновила, написано:

На моих 333 друзьях это заняло 119 секунд.

парсинг стены вконтакте python. Смотреть фото парсинг стены вконтакте python. Смотреть картинку парсинг стены вконтакте python. Картинка про парсинг стены вконтакте python. Фото парсинг стены вконтакте python

На момент написания этой статьи, у Himura в ВКонтакте был 321 друг. У меня это заняло 9 секунд (работа всей программы, а не одного friends.getMutual).

В заключение

Всю необходимую информацию об использованных методах можно найти в щедро написанной документации ВКонтакте, однако мной была обнаружена пара ошибок: не была описана ошибка с кодом 15 (‘error_msg’: ‘Access denied: user deactivated’, ‘error_code’: 15), догадаться можно, что она значит, и uid вместо user_id в документации к методу friends.get. Спустя 2 дня:

парсинг стены вконтакте python. Смотреть фото парсинг стены вконтакте python. Смотреть картинку парсинг стены вконтакте python. Картинка про парсинг стены вконтакте python. Фото парсинг стены вконтакте python

Как говорилось вначале, проект можно найти на GitHub, буду рад, если он понравится ещё кому-то и я получу много вкусных пулл реквестов…

Источник

Блог об аналитике, визуализации данных, data science и BI

Дашборд первых 8 месяцев жизни малыша

Анализ рынка вакансий аналитики и BI: дашборд в Tableau

Анализ альбомов Земфиры: дашборд в Tableau

Гайд по современным BI-системам

Парсинг целевой аудитории ВКонтакте

При размещении рекламы некоторые площадки в настройках аудитории позволяют загрузить список конкретных людей, которые увидят рекламу. Для парсинга id по конкретным пабликам существуют специальные инструменты, но куда интереснее (и дешевле) сделать это собственноручно при помощи Python и VK API. Сегодня расскажем, как для рекламной кампании LEFTJOIN мы спарсили целевую аудиторию и загрузили её в рекламный кабинет.

В материале «Собираем данные по рекламным кампаниям ВКонтакте» подробно описан процесс получения токена пользователя для VK API

Парсинг пользователей

Для отправки запросов потребуется токен пользователя и список пабликов, чьих участников мы хотим получить. Мы собрали около 30 сообществ, посвящённых аналитике, BI-инструментам и Data Science.

Запрос на получение участников сообщества к API ВКонтакте вернёт максимум 1000 строк — для получения последующих тысяч потребуется смещать параметр offset на единицу. Но нужно знать, до какого момента это делать — поэтому опишем функцию, которая принимает id сообщества, получает информацию о числе участников сообщества и возвращает максимальное значение для offset — отношение числа участников к 1000, ведь мы можем получить ровно тысячу человек за раз.

Следующим этапом опишем функцию, которая принимает id сообщества, собирает в один список id всех подписчиков и возвращает его. Для этого отправляем запросы на получение 1000 человек, пока не кончается offset, вносим данные в список и возвращаем его. Проходя по каждому человеку дополнительно проверяем дату его последнего посещения социальной сети — если он не заходил с середины ноября, добавлять его не будем. Время указывается в формате unixtime.

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

Последним шагом записываем каждого пользователя в файл с новой строки.

Аудитория в рекламном кабинете из файла

Переходим в свой рекламный кабинет ВКонтакте и заходим во вкладку «Ретаргетинг». Там будем кнопка «Создать аудиторию»:

парсинг стены вконтакте python. Смотреть фото парсинг стены вконтакте python. Смотреть картинку парсинг стены вконтакте python. Картинка про парсинг стены вконтакте python. Фото парсинг стены вконтакте python

После нажатия на неё откроется новое окно, где можно будет выбрать в качестве источника файл и указать название для аудитории:

парсинг стены вконтакте python. Смотреть фото парсинг стены вконтакте python. Смотреть картинку парсинг стены вконтакте python. Картинка про парсинг стены вконтакте python. Фото парсинг стены вконтакте python

После загрузки пройдёт несколько секунд и аудитория будет доступна. Первые минут 10 будет указано, что аудитория слишком мала: это не так и панель вскоре обновится, если в вашей аудитории действительно более 100 человек.

парсинг стены вконтакте python. Смотреть фото парсинг стены вконтакте python. Смотреть картинку парсинг стены вконтакте python. Картинка про парсинг стены вконтакте python. Фото парсинг стены вконтакте python

Итоги

Сравним среднюю стоимость привлечённого в наше сообщество участника в объявлении с автоматической настройкой аудитории и в объявлении, аудиторию для которого мы спарсили. В первом случае получаем среднюю стоимость в 52,4 рубля, а во втором — в 33,2 рубля. Подбор качественной аудитории при помощи методов парсинга данных из ВКонтакте помог снизить среднюю стоимость на 37%.

Для рекламной кампании мы подготовили такой пост (нажмите на картинку, чтобы перейти к нему):

Источник

1000 друзей Павла Дурова: как выкачивать данные ВКонтакте

Обкачиваем соцсеть своими руками

парсинг стены вконтакте python. Смотреть фото парсинг стены вконтакте python. Смотреть картинку парсинг стены вконтакте python. Картинка про парсинг стены вконтакте python. Фото парсинг стены вконтакте python

Введение

Практически всем, кто занимается количественными исследованиями, знакома следующая проблема: идея есть, а данных для её реализации нет. И хотя сейчас существует немало сайтов с данными (например, Kaggle.com (https://www.kaggle.com/), где можно найти как корпус обзоров на вино, так и классификатор древнеяпонских иероглифов или метаданные по коллекциям Metropolitan Museum of Art), все равно найти что-то готовое, что соответствовало бы индивидуальным нуждам конкретного исследования, довольно сложно. В таких случаях остается одно: выкачивать данные самостоятельно.
ВКонтакте — ценный источник данных, который может помочь в лингвистических, социологических и других исследованиях. Хочется исследовать корпус авторских стихотворных сочинений подростков? Пожалуйста, практически готовый корпус уже ожидает тебя в группе, посвященной поэзии! Хочется понять, как в реальности работает теория шести рукопожатий? Выкачай случайных пользователей и построй граф!
На самом деле, это совсем не сложно, и сегодня мы покажем, как скачать заветные данные.

Что понадобится?

*Например, любые IDE: PyCharm, Sublime Text или любой другой, какой душе угодно. Мы в данном руководстве будем использовать оболочку Jupyter, функционал которой удобен для аналитики: можно писать и редактировать код на каждом этапе, не прогоняя всю программу целиком, строить красивые визуализации и делать ещё кучу всего интересного. Подробнее об установке и возможностях Jupyter можно посмотреть тут.

Примите во внимание, что код для туториала написан с целью помочь понять, что происходит и как все работает, поэтому не является образцом великолепия.

Этап 1. Получение ключа к ВК API

Первый шаг на пути к данным состоит в том, чтобы получить доступ к ВKонтакте API (Application Programming Interface), с помощью которого мы и будем дальше взаимодействовать с ВКонтакте. API содержит в себе множество методов, которые позволяют быстро доставать из базы ВК нужную информацию, например, со страниц пользователей, групп и т.д. (вернее, только ту информацию, которая не скрыта).
Чтобы иметь возможность их использовать, надо авторизоваться в ВК и создать Standalone приложение на странице API. Для этого надо во вкладке Мои приложения нажать Создать приложение.
Дальше надо выбрать Standalone-приложение, назвать его и подключить.
Как только вы его подключите, вы окажетесь во вкладке Информация, где находятся описание, название и т.д. Здесь трогать ничего не нужно, и можно сразу перейти на вкладку Настройки слева. Здесь мы смотрим на Сервисный ключ доступа, который надо скопировать или запомнить, потому что он нам понадобится дальше.
Страничку API пока оставляем открытой, мы к ней ещё вернемся чуть позже.

Этап 2. Пишем код

Часть 1. Пользователи

Шаг 1

Теперь, когда у нас есть ключ доступа к API, можно смело переходить к самой интересной части — написанию кода. Для начала устанавливаем библиотеки и подгружаем нужные модули оттуда. В туториале мы будем использовать библиотеку requests — пакет, который позволяет посылать http-запросы на сервер и отдавать ответы на эти запросы в различных форматах*.

** Если не знаете как устанавливать библиотеки в Python, не пугайтесь, Интернет полон различных гайдов о том, как это делать. Например, вот.
***На самом деле, это только один из способов добычи данных ВКонтакте через Python. Существует ещё некоторое количество библиотек, которые позволяют получать ответы от ВКонтакте API другими способами. Они очень хорошо гуглятся, так что при желании можно освоить и альтернативные техники. Или если кто-то уже знаком с другими методами, будет здорово услышать о них в комментариях).

Шаг 2

Шаг 3

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

Появился список методов для работы с данными пользователей.

Шаг 4

Итак, попробуем вытащить расширенную информацию о пользователе. Откроем страницу метода get и внимательно читаем параметры. Допустим, мы хотим получить информацию о пользователе с идентификатором 1 (user_ids=1).
Для начала запишем ключ доступа и версию ВК API в отдельные переменные формата «строка», чтобы мы могли их использовать потом****.

* Заметьте, что так как мы используем Jupyter Notebook, нам не требуется создавать отдельный файлик на компьютере, хотя такой вариант и возможен. Но мы просто зададим ключи как переменные в отдельной ячейке скрипта. Теперь сформируем запрос к API. Для обращения к методу надо перед его названием написать, к какой группе он относится (так как названия методов пересекаются в различных группах). Мы записываем запрос как форматируемую строку, где значения в <> будут принимать значения переменных, которые там записаны**.

И посмотрим на результат

По умолчанию (без заданных параметров) мы получили просто имя, фамилию и статус страницы.

***** Если вы хотите получить информацию больше, чем об одном человеке, вы можете записать их идентификаторы через запятую. Если пользователей много, то можно задать их id в отдельной переменной (допустим, загрузить из файла), и записать её также в <>. Важно, чтобы они были разделены через запятую. Подробнее о форматировании строк в Python.

Шаг 5.

Теперь добавим конкретики. Допустим, мы хотим получить ещё даты рождения, страну и город. Эти поля находятся в параметре fields, как говорит нам документация.

Шаг 6.

Пойдем дальше: скачаем 200 друзей Павла Дурова и запишем их в отдельный список. Для этого нам потребуется функция из той же вкладки Users — getFollowers.
Сначала оформим запрос в виде строки, в которой мы будем потом форматировать части, находящиеся в <>.

Тут у нас появляется новые параметры — count и offset. Сount показывает, сколько друзей за один запрос мы будем выкачивать, а offset — на сколько значений мы будем сдвигаться каждый раз, когда отправляем новый запрос. То есть если бы параметра offset не было, мы бы каждый раз скачивали только 100 первых друзей, а с ним мы по очереди (итеративно) выбираем каждую следующую сотню.
Итак, сначала мы создаем пустой список friends, в который мы потом запишем выгруженных пользователей. Потом мы определяем, какие отступы (offset) у нас будут каждый раз и с каким шагом. За это отвечает функция range: условно говоря, у нас будет 3 шага от 0 до 300, каждый из которых будет равен 100. После чего мы циклом выкачиваем по 100 подписчиков за каждую итерацию. И в конечном итоге записываем фамилии пользователей в список.

И вуаля! Список подписчиков готов!

Часть 2. Сообщества

А теперь предположим, что для наших исследовательских целей мы хотим получить корпус каких-нибудь текстов. Для этого мы можем, например, скачать стену какого-то сообщества или пользователя.
Принцип тут тот же, что и при работе с юзерами: выбираем метод, формируем запрос, наслаждаемся.
Список методов для работы со стенами находится в соответствующей вкладке Wall в документации. Если мы хотим выкачать посты на стене, то нам нужен метод wall.get.
Давайте попробуем скачать посты сообщества Вышкинские хокку. Для начала попробуем выкачать первые 100 публикаций.

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

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

Шаг 1

Пишем строку запроса, в который добавляем параметр offset, который отвечает за отступы.

Шаг 2

Создаем пустой список texts, в который будем записывать тексты. Потом пишем цикл, который будет выкачивать по 100 постов за каждую из 4-ех итераций, и записывать каждый пост в созданный список.

Посмотрим на то, как это выглядит в списке:
Ага, в тексте есть лишние символы, а точнее \n. Это всего лишь разделитель: он показывает, что текст в данном месте в оригинале начинается с новой строки.

Шаг 3

Создаем в корневой папке на компьютере файл texts.txt, в который мы и запишем итоговый результат.

Шаг 4

Записываем посты из списка texts в файл texts.txt. И заменим символы \n в тексте на нормальные разделители строки.

Поздравляем, вы стали счастливым обладателем сборника страдальческих студенческих хокку!
В туториале показаны основы работы в ВКонтакте API с помощью Python. На деле ВК может предоставить намного больше: можно искать пользователей по заданным критериям, скачивать фотографии и ещё кучу всего интересного. Главное теперь — не бояться обилия методов в документации и искать то самое, что нужно именно вам.

Источник

Парсинг сайтов через Python

Всем привет. Сегодня я расскажу о парсинге сайтов на Python.

Для начала установим модуль:

Далее создаем файл и добавляем модуль

from bs4 import BeautifulSoup

На этом подготовка окончена. Переходим к предисловию.

Я надеюсь все когда-нибудь заходили в инструменты разработчика и попадали на страницу «Elements», в которой видели какой-то большой текст, который при изменении меняет страницу. Это и есть HTML, его мы и будем парсить.

У каждого элемента есть свой childNode или parentNode. Это элементы в иерархии страницы.

Так же у элементов есть свой класс или айди.

Каждый элемент имеет свой тег

Сегодня мы будем парсить сайт vk.com, а именно мою группу, в которой будет эта статья. Будем парсить кол-во лайков на каждый записи

Имея ссылку (https://vk.com/p3rthython) можно получить html страницы

парсинг стены вконтакте python. Смотреть фото парсинг стены вконтакте python. Смотреть картинку парсинг стены вконтакте python. Картинка про парсинг стены вконтакте python. Фото парсинг стены вконтакте python

Имея html-страницу можно получить её распарсенный вид

парсинг стены вконтакте python. Смотреть фото парсинг стены вконтакте python. Смотреть картинку парсинг стены вконтакте python. Картинка про парсинг стены вконтакте python. Фото парсинг стены вконтакте python

Теперь можно получать элементы со страницы. Для этого есть метод find(для первого элемента с указанными аргументами) и find_all(для всех элементов с указанными аргументами).

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

парсинг стены вконтакте python. Смотреть фото парсинг стены вконтакте python. Смотреть картинку парсинг стены вконтакте python. Картинка про парсинг стены вконтакте python. Фото парсинг стены вконтакте python

Я получил такой элемент с тегом div и классом like_button_count

парсинг стены вконтакте python. Смотреть фото парсинг стены вконтакте python. Смотреть картинку парсинг стены вконтакте python. Картинка про парсинг стены вконтакте python. Фото парсинг стены вконтакте python

Как нам его получить в коде?

Для этого нужно воспользоваться поиском через find_all, т.к цель распарсить кол-во лайков на каждой записи

парсинг стены вконтакте python. Смотреть фото парсинг стены вконтакте python. Смотреть картинку парсинг стены вконтакте python. Картинка про парсинг стены вконтакте python. Фото парсинг стены вконтакте python

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

Занесем эти элементы в переменную likes_count и выведем её в консоль:

парсинг стены вконтакте python. Смотреть фото парсинг стены вконтакте python. Смотреть картинку парсинг стены вконтакте python. Картинка про парсинг стены вконтакте python. Фото парсинг стены вконтакте python

Мы ничего не получили, потому что вк автоматически переносит нас в мобильную версию, если мы им не скажем, что мы не с мобильного устройства. Для этого нужно указать доп. параметры(заголовки) для запроса, а именно user-agent(информация о браузере). Заголовки — словари, которые передаются в качестве аргумента в запрос.

парсинг стены вконтакте python. Смотреть фото парсинг стены вконтакте python. Смотреть картинку парсинг стены вконтакте python. Картинка про парсинг стены вконтакте python. Фото парсинг стены вконтакте python

2. Создаем ключ(User-Agent) со значением User-Agent обычного браузера(я буду использовать Chrome).

Можете скопировать Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.129 Safari/537.36

3. Добавляем наш словарь, как аргумент

парсинг стены вконтакте python. Смотреть фото парсинг стены вконтакте python. Смотреть картинку парсинг стены вконтакте python. Картинка про парсинг стены вконтакте python. Фото парсинг стены вконтакте python

парсинг стены вконтакте python. Смотреть фото парсинг стены вконтакте python. Смотреть картинку парсинг стены вконтакте python. Картинка про парсинг стены вконтакте python. Фото парсинг стены вконтакте python

парсинг стены вконтакте python. Смотреть фото парсинг стены вконтакте python. Смотреть картинку парсинг стены вконтакте python. Картинка про парсинг стены вконтакте python. Фото парсинг стены вконтакте python

Ура! Мы получили список элементов,но кол-во постов 3, а кол-во элементов 11.

Перейдем в браузер и при помощи Ctrl + F во вкладке Elements ищем элементы с классом like_button_count. Как оказалось этот класс используется для лайков, репостов и кол-ва комментариев. Для получения именно для лайков мы будем использовать childNodes и parentNodes.

Мы будем искать все посты и дальше при помощи childNodes искать именно кол-во лайков.

Заметим, что у каждого поста есть одинаковые классы

парсинг стены вконтакте python. Смотреть фото парсинг стены вконтакте python. Смотреть картинку парсинг стены вконтакте python. Картинка про парсинг стены вконтакте python. Фото парсинг стены вконтакте python

Мы будем искать по классу _post. Перепишем код. Заменим переменную likes_count на posts. Так же заменим нужный класс на _post

парсинг стены вконтакте python. Смотреть фото парсинг стены вконтакте python. Смотреть картинку парсинг стены вконтакте python. Картинка про парсинг стены вконтакте python. Фото парсинг стены вконтакте python

Выведем переменную posts:

парсинг стены вконтакте python. Смотреть фото парсинг стены вконтакте python. Смотреть картинку парсинг стены вконтакте python. Картинка про парсинг стены вконтакте python. Фото парсинг стены вконтакте python

Мы получили нужный нам результат, но так как я из Республики Беларусь, то текст немного меняется на белорусский язык. Для исправления этого я поставлю прокси в запрос(не запуск с прокси, а прокси в запросах).

Для этого создадим еще 1 словарь(я назову его ru_proxy).

парсинг стены вконтакте python. Смотреть фото парсинг стены вконтакте python. Смотреть картинку парсинг стены вконтакте python. Картинка про парсинг стены вконтакте python. Фото парсинг стены вконтакте python

Теперь нужно добавить ключ https (если вы делаете запрос и на https, и на http, то добавляйте 2 ключа) в него вписываем наш прокси в формате ip:port

парсинг стены вконтакте python. Смотреть фото парсинг стены вконтакте python. Смотреть картинку парсинг стены вконтакте python. Картинка про парсинг стены вконтакте python. Фото парсинг стены вконтакте python

Так как мои прокси с паролем, то нужно немного изменить значения ключа https на

парсинг стены вконтакте python. Смотреть фото парсинг стены вконтакте python. Смотреть картинку парсинг стены вконтакте python. Картинка про парсинг стены вконтакте python. Фото парсинг стены вконтакте python

Если у вас запрос по протоколу http, то делаете аналогично, но теперь http.

парсинг стены вконтакте python. Смотреть фото парсинг стены вконтакте python. Смотреть картинку парсинг стены вконтакте python. Картинка про парсинг стены вконтакте python. Фото парсинг стены вконтакте python

Добавляем прокси в запрос

парсинг стены вконтакте python. Смотреть фото парсинг стены вконтакте python. Смотреть картинку парсинг стены вконтакте python. Картинка про парсинг стены вконтакте python. Фото парсинг стены вконтакте python

В аргумент proxies ставим значение ru_proxy

Теперь всё работает на русском языке)

Переходим к постам. Родитель класса с количеством лайков это тег A с классами like_btn like _like

парсинг стены вконтакте python. Смотреть фото парсинг стены вконтакте python. Смотреть картинку парсинг стены вконтакте python. Картинка про парсинг стены вконтакте python. Фото парсинг стены вконтакте python

Так как этот элемент находится в каждом посте, то нам нужно итерировать посты и искать этот элемент в каждом посте

парсинг стены вконтакте python. Смотреть фото парсинг стены вконтакте python. Смотреть картинку парсинг стены вконтакте python. Картинка про парсинг стены вконтакте python. Фото парсинг стены вконтакте python

Вот что нам выводится в консоль

парсинг стены вконтакте python. Смотреть фото парсинг стены вконтакте python. Смотреть картинку парсинг стены вконтакте python. Картинка про парсинг стены вконтакте python. Фото парсинг стены вконтакте python

А это уже ровно 3 поста, а не 11 как было раньше. Но появился пустой список, его мы будем пропускать через оператор if

парсинг стены вконтакте python. Смотреть фото парсинг стены вконтакте python. Смотреть картинку парсинг стены вконтакте python. Картинка про парсинг стены вконтакте python. Фото парсинг стены вконтакте python

Теперь всё еще легче, нам просто нужно достать кол-во лайков из каждого элемента:

парсинг стены вконтакте python. Смотреть фото парсинг стены вконтакте python. Смотреть картинку парсинг стены вконтакте python. Картинка про парсинг стены вконтакте python. Фото парсинг стены вконтакте python

Тут я использовал find, т.к получение списка нам не нужно.В консоли мы получили такой результат

парсинг стены вконтакте python. Смотреть фото парсинг стены вконтакте python. Смотреть картинку парсинг стены вконтакте python. Картинка про парсинг стены вконтакте python. Фото парсинг стены вконтакте python

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *