Быстрый анализ сайтов конкурентов через сайтмапы. Часть 2 - простой анализ

Или как дальше на коленке продолжить анализировать собранное

Posted by snakers41 on June 29, 2017

Статьи цикла

Быстрый анализ сайтов конкурентов через сайтмапы. Часть 1 - парсинг

Быстрый анализ сайтов конкурентов через сайтмапы. Часть 2 - простой анализ

Быстрый анализ сайтов конкурентов через сайтмапы. Часть 3 - более глубокий анализ



Чуть менее заманчивая картинка, которая отражает на какие основные страны  построено SEO на данном рынке


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


Для начала посмотрим, какие данные внутри

result_df = pd.read_csv('all_sitemaps_2.csv')
result_df.head()


Выглядит это примерно так:


Для начала нужно выделить протокол и наличие www в URL.

result_df['protocol'] = result_df['loc'].apply(lambda x: process_http(x,['http://','https://'])[1])
result_df['loc'] = result_df['loc'].apply(lambda x: process_http(x,['http://','https://'])[0])
result_df['www'] = result_df['loc'].apply(lambda x: process_http(x,['www.'])[1])
result_df['loc'] = result_df['loc'].apply(lambda x: process_http(x,['www.'])[0])


Давайте теперь посмотрим, что получилось с помощью сводной таблицы:

table = pd.pivot_table(
    result_df,
    index=["broker"],
    columns=["protocol", "www"],
    values=["loc"],
    aggfunc={"loc":len},fill_value=0
)


Выводы очевидны - все используют https и домены c www.


Каких-то особых откровений тут нет. Давайте разделим урлы на составляющие.

def try_split(string, sep,idx):
    try:
        return string.split(sep)[idx]
    except:
        return ''
result_df['broker'] = result_df['loc'].apply(lambda x: try_split(x,'/',0))
table = pd.pivot_table(
    result_df,
    index=["broker"],
    columns=["protocol", "www"],
    values=["loc"],
    aggfunc={"loc":len},fill_value=0
)
table


Сразу становится видно, какая компания самая древняя и крупная 


Разделим дальше для ручной аннотации и посмотрим, что получится.

result_df['first_nav'] = result_df['loc'].apply(lambda x: try_split(x,'/',1))
result_df['second_nav'] = result_df['loc'].apply(lambda x: try_split(x,'/',2))


Сделаем сводную таблицу и скачаем файл. После этого сделаем ручную аннотацию.


table = pd.pivot_table(
    result_df,
    index=["first_nav","second_nav"],
    columns=["broker"],
    values=["loc"],
    aggfunc={"loc":len},fill_value=0
)
table


table.to_csv('second_split.csv')


Ручную аннотацию делаем простым просеиванием ячеек в экселе по эвристикам (ищем зависимости в урлах). Получается такая картинка.




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