Warning: include(/volume1/web/cyberhost.biz/wp-content/plugins/jaster_cahce/cache/top-cache.php): failed to open stream: No such file or directory in /volume1/web/cyberhost.biz/index.php on line 9 Call Stack: 0.0001 356256 1. {main}() /volume1/web/cyberhost.biz/index.php:0 Warning: include(): Failed opening '/volume1/web/cyberhost.biz/wp-content/plugins/jaster_cahce/cache/top-cache.php' for inclusion (include_path='.:/usr/share/pear') in /volume1/web/cyberhost.biz/index.php on line 9 Call Stack: 0.0001 356256 1. {main}() /volume1/web/cyberhost.biz/index.php:0 Кого агрегирует Meduza? | Хостинг за 90 р. от cyberhost.biz — платный хостинг
+7 993 930-19-90 suport@cyberhost.biz

Гегель считал, что общество становится современным, когда новости заменяют религию.
The News: A User’s Manual, Alain de Botton

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

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

Краткое определение того, что такое Meduza:

«Помните, как неумные люди все время называли «Ленту»? Говорили, что «Лента» — агрегатор. А давайте мы и в самом деле сделаем агрегатор» (интервью Forbes)


(это не просто КДПВ, а топ-35 медиа по числу новостей указанных в качестве источника на сайте Meduza, включая её саму)

Конкретизируем и формализуем вопросы:

  • Q1: Из каких ключевых источников состоит лента новостей?

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

  • Q2: Есть ли на них какая-то простая и интерпретируемая структура?

Проще говоря, можем ли мы кластеризовать источники в осмысленные группы?

  • Q3: Можно ли по этой структуре определить общие параметры агрегатора?

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

Что такое источник?

У каждой новости на сайте есть указанный источник, в качестве примера помеченный ниже красным.


Именно этот параметр нас сегодня и будет особенно интересовать. Для анализа нам нужно собрать мета-данные по всем новостям. Для этого у Meduza имеется внутренний API, который можно использовать для своих нужд — запрос ниже вернет 10 последних русскоязычных новостей:

https://meduza.io/api/v3/search?chrono=news&page=0&per_page=10&locale=ru

На основе вот этой Хабра-статьи с кратким описание API и подобных запросов, мы получаем код для скачивания данных

Парсим и скачиваем посты с Meduza.io через их APIimport requests
import json
import time
from tqdm import tqdm
stream = ‘https://meduza.io/api/v3/search?chrono=news&page={page}&per_page=30&locale=ru’
social = ‘https://meduza.io/api/v3/social’
user_agent = ‘Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.3411.123 YaBrowser/16.2.0.2314 Safari/537.36’
headers = {‘User-Agent’ : user_agent }
def get_page_data(page):
# Достаём страницы
ans = requests.get(stream.format(page = page), headers=headers).json()
# отдельно достаёт все социальные
ans_social = requests.get(social, params = {‘links’ : json.dumps(ans[‘collection’])}, headers=headers).json()
documents = ans[‘documents’]
for url, data in documents.items():
try:
data[‘social’] = ans_social[url][‘stats’]
except KeyError:
continue
with open(‘dump/page{pagenum:03d}_{timestamp}.json’.format(pagenum = page, timestamp = int(time.time())), ‘w’, encoding=’utf-8′) as f:
json.dump(documents, f, indent=2)
for i in tqdm(range(25000)):
get_page_data(i)

Пример того, как выглядят данные для изучения:

Пример мета-данных одной из новостных записейaffiliate NaN
authors []
bg_image NaN
chapters_count NaN
chat NaN
document_type news
document_urls NaN
full False
full_width False
fun_type NaN
hide_header NaN
image NaN
keywords NaN
layout_url NaN
live_on NaN
locale ru
modified_at NaN
one_picture NaN
prefs NaN
pub_date 2015-10-23 00:00:00
published_at 1445601270
pushed False
second_title NaN
share_message NaN
social {‘tw’: 0, ‘vk’: 148, ‘reactions’: 0, ‘fb’: 4}
source Интерфакс
sponsored NaN
sponsored_card NaN
table_of_contents NaN
tag {‘name’: ‘новости’, ‘path’: »}
thesis NaN
title Роструд объявил о прекращении роста безработицы
topic NaN
updated_at NaN
url news/2015/10/23/rostrud-ob-yavil-o-prekraschen…
version 2
vk_share_image /image/share_images/16851_vk.png?1445601291
webview_url NaN
with_banners True
fb 4
reactions 0
tw 0
vk 148
trust 3
Name: news/2015/10/23/rostrud-ob-yavil-o-prekraschenii-rosta-bezrabotitsy, dtype: object

Данные для статьи были собраны в середине июля 2016 и доступны здесь {git}.

Типы документов и надежность источника

Начнем со следующего простого вопроса: какова доля новостей среди всех имеющихся документов и какой вид имеет распределение типов документов?

Из этого распределение видно (для удобства здесь же табличное представление этого распределения ниже), что новости составляют порядка 74% всех документов.

Это же распределение в виде таблицы


Далее мы сфокусируемся на новостях и в качестве иллюстрации рассмотрим параметр "надежность источника", применимый только к новостям:


Как мы видим фактически все новости попадают в категории "надежный источник" или "требует подтверждения".

Анализ и кластеризация источников

На самом первом графике (в начале статьи) мы видим, что существенный вклад вносят несколько топовых источников. Возьмем источники, на которые приходится порядка ~100 ссылок и попробуем найти на них структуру.



(размеры вершины и дуг пропорциональны количеству ссылок)

Безусловно количество кластеров и само разбиение может быть иным и во многом здесь субъективно.

Из графика выше мы видим, что самый большой вклад вносят российские информагентства ~30% всех новостей, за ним следуют бизнес-медиа с ~11.5%, далее переводы англоязычных медиа ~8.5% и мировые информагентства ~3.5%. Совокупно эти четыре кластера покрывают бо́льшую часть новостей (50%+). У остальных кластеров <3%. Самоцитирование составляет порядка 5%.

Анализ общего числа публикаций

Также интересно: насколько количество новостей из различных источников сопоставимо во времени и можем ли мы взять топ (например, топ-10) и оценить по нему общий тренд на всё количество новостей.

Мы видим, что только ТАСС и Интерфакс количественно существенно отличаются от остального топа, остальные источники количественно довольно близки к друг другу.

Если мы добавим топ-10 и общее число новостей, то заметим, что первое хорошо апроксимирует второе, то есть количество новостей в топ-10 даёт хорошее представление об общем количестве новостей.

Сравнение с медиалогией

Данные и графики в этой части взяты отсюда.

Интересно взглянуть насколько такая выборка соотносится с общими рейтингами цитируемости новостей в сети. Рассмотрим имеющиеся данные медиалогии за май 2016-го:

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

Также сайты и журналы

Выводы и ссылка на данные

Тезисно, выводы по рассматриваемым вопросам:

  • Q1: Топ 10-15 новостных источников составляющих большинство новостей: российские информагентства и бизнес-медиа, а также переводы известных международных информагентств и медиа (более половины всех новостей) — см. первый график.

  • Q2: На топовых источниках выделено семь кластеров: причем четыре ключевых перечисленных выше (Q1) покрывают большинство топовых источников и большинство самих новостей — см. график в разделе "Анализ и кластеризация источников".

  • Q3: Топ-10 источников позволяет оценить общий тренд на количество новостей агрегатора во времени — см график в разделе "Анализ общего числа публикаций".

Данные (актуальность — середина июля 2016) доступны в git репозитории.

Warning: include(/volume1/web/cyberhost.biz/wp-content/plugins/jaster_cahce/cache/bottom-cache.php): failed to open stream: No such file or directory in /volume1/web/cyberhost.biz/index.php on line 13 Call Stack: 0.0001 356256 1. {main}() /volume1/web/cyberhost.biz/index.php:0 Warning: include(): Failed opening '/volume1/web/cyberhost.biz/wp-content/plugins/jaster_cahce/cache/bottom-cache.php' for inclusion (include_path='.:/usr/share/pear') in /volume1/web/cyberhost.biz/index.php on line 13 Call Stack: 0.0001 356256 1. {main}() /volume1/web/cyberhost.biz/index.php:0