Основные понятия
Паблик (от англ. public) — сообщество, группа, публичная страница в социальных сетях, созданная для отображения и поддержания определённой темы.
Основная цель создания паблика — формирование группы подписчиков, которые могут получать информацию, общаться с единомышленниками, участвовать в различных мероприятиях.
Пост в паблике — это информационное сообщение, размещённое в ленте группы или сообщества.
С помощью постов пользователи социальных сетей рассказывают о своих новостях, делятся интересными мнениями, фотографиями и видеозаписями, а другие пользователи могут оставлять комментарии под постами, образуя ветку комментариев.
Анализ противоправной деятельности лиц, обвиняемых и подозреваемых в совершении преступлений, показал, что их противоправное поведение тем или иным образом отражается в сетевом пространстве. В постах и комментариях пабликов может распространятся противоправная информация (клевета, материалы, возбуждающие межнациональную и межрелигиозную вражду, призывы к насилию и иная информация, за распространение которой предусмотрена уголовная или административная ответственность). Следовательно, паблики могут быть надежным источником информации о лицах, представляющих интерес для правоохранительных органов. Как правило, для лиц, распространяющих запрещенный контент, важна публичность, наибольший охват аудитории, возможность быстрой передачи информации неограниченному кругу лиц, что обеспечивается использованием открытых пабликов с большим количеством подписчиков.
Для парсинг информации с помощью API ВКонтакте, необходимо установить и настроить Python и среду разработки (мы рассказывали как это сделать в этом посте — https://infocrime.ru/python_tools/), а также зарегистрироваться во ВКонтакте в качестве разработчика и получить ключ доступа (токен).
Для парсинга информации с использованием API нам понадобятся следующие библиотеки:
Requests — это библиотека для выполнения HTTP-запросов на языке Python. Она создана для упрощения взаимодействия с API и веб-сервисами, получения данных с веб-сайтов и выполнения других задач на основе HTTP.
Time — модуль предоставляет функции для работы со временем, как с системным, так и со временем в человекочитаемом формате.
Json — модуль встроен в стандартную библиотеку Python и предназначен для работы с JSON-данными
Практический пример
В IDE создадим новый проект, настроим виртуальное окружение и создадим два файла: config.py и vk_parse.py.
Содержание файла config.py:
token = 'вш токен'
version = 5.199
domain = 'ваш паблик'
count = 10
count_comments = 100
offset = 0
all_posts = []
deep_int = 10
thread_items_count = 10
содержание файла vk_parse.py:
# Парсинг пабликов vk
import time
import requests
import json
import datetime
import csv
# импорт файла конфигурации
import config
# Получение постов
def take_posts():
token = config.token
version = config.version
domain = config.domain
#count = config.count
offset = config.offset
deep_int = config.deep_int
all_posts = []
while offset < deep_int:
response = requests.get('https://api.vk.com/method/wall.get',
params={
'access_token': token,
'v': version,
'domain': domain,
'count': count,
'offset': offset
}
)
data = response.json()['response']['items']
offset += 10
all_posts.extend(data)
#print(all_posts)
return all_posts
# Получение комментариев
def take_comments(owner_id, post_id):
offset = config.offset
deep_int = config.deep_int
all_comments = []
while offset < deep_int:
res = requests.get(
'https://api.vk.com/method/wall.getComments',
params={
'owner_id': owner_id,
'post_id': post_id,
'thread_items_count': config.thread_items_count,
'access_token': config.token,
'v': config.version,
'count': config.count_comments,
'offset': config.offset
}
)
comments_data = res.json()['response']['items']
offset +=10
all_comments.extend(comments_data)
return all_comments
def post_wtiter(data):
global img_url
post_data = list(reversed(data))
for post in post_data:
try:
print('https://vk.com/wall',post['owner_id'],'_',post['id'],sep='')
print(post['text'])
all_commments = take_comments(post['owner_id'], post['id'])
comments_writer(all_commments)
with open('post_count.txt') as f:
post_count = f.read()
post_count_int = int(post_count)
except:
pass
def comments_writer(data):
comments_data = list(reversed(data))
for comments in comments_data:
try:
print('https://vk.com/id',comments['from_id'],sep='')
print(comments['text'])
threads_data = list(comments['thread']['items'])
for threads in threads_data:
try:
print('https://vk.com/id',threads['from_id'],sep='')
print(threads['text'])
except:
pass
except:
pass
def program():
take_posts()
all_posts = take_posts()
post_wtiter(all_posts)
if __name__ == '__main__':
count = int(input('Укажите количество постов для парсинга (не более 100): '))
program()
Выполнив данный код, вы получите то количество постов, которое указали при запуске программы.
В дальнейшем, вы можете анализировать полученную информацию, например, на содержание маркеров, свидетельствующих о совершаемом преступлении.