среда, 27 июля 2016 г.

Цель сбора базы из инстаграма

Как использовать базу пользователей instagram ?

Первое и самое эффективное использование собранной базы, это естественно массфолловинг (mass following), это подписка на пользователей. Часть пользователей получив уведомление на подписку, посмотрят на ваш аккаунт и если он их заинтересует они подпишутся и на вас.

Второй момент это комментирование их фоток(постов), с неявным указанием собственной рекламы.

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

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

Собирайте максимальное количество информации, хуже от избытка информации никогда не будет, а вот дополнительные крупицы помогут вам более четко определить свою ЦА (целевую аудиторию).

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

Если вам нужна помощь или консультация обращайтесь.

Продолжение следует ...


вторник, 5 июля 2016 г.

Сбор информации в инстаграме по определенному месту

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


А теперь мы немного видоизменим наш скрипт, что бы собрать информацию по конкретному месту (location). Я правда не знаю есть ли алгоритм по которому инстаграм присваивает метки, этот момент я так глубоко не изучал и не анализировал.

Конечно для начала вам нужно будет выяснить сам location, это в принципе можно сделать через тот-же поиск, в нашем случае сделаем локацию Самара.

















В принципе здесь небольшие изменения в URL, а также не большие изменения и в ответном JSON


Instagram in JSON

Давайте переделаем наш скрипт под locations приведу весь код уже с изменениями, кому нужно может сравнить
с прошлой версией.

Изменения выделил желтым цветом.


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#!/usr/bin/env python
# -*- coding: utf8 -*-
import json, urllib, urllib2, os.path
import codecs
import time

DIR = os.path.abspath(os.curdir) + '/' 
                                       
tag = '213094418'

def get(url, timeout=10):
        try:
            return urllib2.urlopen(url, timeout=timeout).read()
        except:
            return 0

def get_max_id(jsonres):
    try:
        jres = jsonres['location']['media']['page_info']['end_cursor']
        return jres
    except:
        return 0

def have_next_page(jsonres):
    try:
        jres = jsonres['location']['media']['page_info']['has_next_page']
        if  jres == True:
            return 1
        else:
            return 0
    except:
        return 0

def get_media_info(noderow):
        m = []
        for x in noderow:
              code = x['code']
              owner= x['owner']
              mydate = x['date']
              try:
                 caption = x['caption']
              except:
                 caption = 'none'
              m.append([str(code),str(owner),str(mydate),caption])
        return m

def main(tag):
    f = codecs.open('instagram_by_' + tag + '_data.txt','w', 'utf-8')     
    main_url = 'https://www.instagram.com/explore/locations/' + tag + '/?__a=1'
    page = 1
    res = json.loads(get(main_url)) 
    max_id = None
    while page == 1:
        for i in get_media_info(res['location']['media']['nodes']):
             caption = i[3]
             print i[0]
             mycaption2 = caption.replace('\n','')
             f.write(str(i[0]) + ',' + str(i[1])+ ','+ str(i[2])+ ','+ mycaption2+'\n')
        page = have_next_page(res)
        time.sleep(3)
        if page == 1:
            print 'next page'
            max_id = get_max_id(res)
            main_url = 'https://www.instagram.com/explore/locations/' + tag + '/?__a=1' + '&max_id=' + str(max_id)
            res = json.loads(get(main_url))
    print 'DONE!'

if __name__ == '__main__':
    main(tag)


Ну вот собственно этот скрипт собирает данные уже по локации

Я не специалист по языкам программирования и код наверное
далек от идеала, но он работает и свою функцию в принципе
выполняет.

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

воскресенье, 3 июля 2016 г.

Собираем аудиторию по хештегу из Instagram

В этой статье вы научитесь собирать список фото и ИД аккаунтов из инстаграма по любому хештегу.


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

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

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

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#!/usr/bin/env python
# -*- coding: utf8 -*-
import json, urllib, urllib2, random, os.path
import codecs
import time
from urllib import urlencode

DIR = os.path.abspath(os.curdir) + '/' #текущая директория куда будет писаться файл с
                                       #результатами
tag = 'самара' #здесь задаем переменную с нужным нам хештегом

#выполнение запроса к сайту и получение данных 
def get(url, timeout=10):
        try:
            return urllib2.urlopen(url, timeout=timeout).read()
        except:
            return 0

def get_max_id(jsonres):
    try:
        jres = jsonres['tag']['media']['page_info']['end_cursor']
        return jres
    except:
        return 0

def have_next_page(jsonres):
    try:
        jres = jsonres['tag']['media']['page_info']['has_next_page']
        if  jres == True:
            return 1
        else:
            return 0
    except:
        return 0

def get_media_info(noderow):
    try:
        return [(x['code'], x['owner'], x['date'], x['caption']) for x in noderow]
    except:
        return 0

def main(tag):
    f = codecs.open('instagram_by_' + tag + '_data.txt', 'w', encoding='utf-8')     
    main_url = 'https://www.instagram.com/explore/tags/' + tag + '/?__a=1'
    page = 1
    res = json.loads(get(main_url)) 
    max_id = None
    while page == 1:
        for i in get_media_info(res['tag']['media']['nodes']):
             caption = i[3]
             mycaption2 = caption.replace('\n','')
             f.write(str(i[0]) + ',' + str(i[1])+ ','+ str(i[2])+ ','+ mycaption2+'\n')
        page = have_next_page(res)
        time.sleep(3)
        if page == 1:
            print 'next page'
            max_id = get_max_id(res)
            main_url = 'https://www.instagram.com/explore/tags/' + tag + '/?__a=1' + '&max_id=' + str(max_id)
            res = json.loads(get(main_url))
    print 'DONE!'

if __name__ == '__main__':
    main(tag)

Прежде чем разобраться в этом коде, попробуйте пройти по адресу https://www.instagram.com/explore/tags/здесьнужныйвамхештег/?__a=1
Я в коде использовал хештег самара
https://www.instagram.com/explore/tags/самара/?__a=1

Вам откроется вот такая картинка:





Это как раз и есть лента инстаграма в формате JSON, вот её мы с вами и сохраняем в свой файлик.
Для перехода к следующей странице ленты, так называемая пагинация, мы используем параметр '&max_id='
подставляя в него значение end_cursor и так продолжаем до тех пор пока в JSON ответе флаг параметра 'has_next_page' 
не будет равен false.

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


В каждой строке файла, через разделитель(в нашем случае это , запятая) будет содержаться информация согласно этой функции:


def get_media_info(noderow):
    try:
        return [(x['code'], x['owner'], x['date'], x['caption']) for x in noderow]
    except:
        return 0

Где [code] - это ид фотки(поста), [owner] - это ID - пользователя , [date] - дата поста в unix timestamp формате , [caption] - это первичный комментарий пользователя в котором он описывает фото и дополнительные хештеги.

В принципе этого файла более чем достаточно для сбора и анализа аудитории, то есть благодаря наличию остальных хештегов, вы можете отфильтровать торговцев которые перечисляют кучу всевозможных городов. Так же благодаря этим данным вы можете выбрать людей занимающихся какой-то специализацией, например салоны красоты. 
Конечно для более полноценного анализа этот файл лучше импортировать в какую нибудь СУБД или на крайний случай в Excel.
Сколько данных дает инстаграм, вышеуказанным скриптом достается не очень большое кол-во постов, всегда по разному может 20 тыс. может 30 тыс. хотя по общему количеству постов по популярному хештегу может быть и более 1 млн., так же в ленту не попадут посты из закрытых аккаунтов, хотя в общем количестве они фигурируют. Проверено экспериментальным путем.

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

Всем спасибо за внимание.

Если есть вопросы пишите в комментариях