Важная информация
Показано с 1 по 9 из 9

Тема: Парсинг ВКонтакте

  1. #1 Парсинг ВКонтакте 
    Гуру Аватар для Абадябер
    Регистрация
    09.12.2010
    Адрес
    Беларусь, Минск
    Сообщений
    1,219
    Сказал(а) спасибо
    302
    Поблагодарили 176 раз(а) в 144 сообщениях
    Записей в блоге
    5
    Приветствую вас, ребята. Недавно у меня возникла кое-какая идея, но при ее реализации я столкнулся с своей собственной некомпетентностью в сфере, к которой эта идея, собственно, принадлежит.
    Задача у меня такова: есть группа ВКонтакте. На основе активности ее участников мне нужно сгенерировать обычную html-табличку, которая эту активность и будет отображать. Конкретно: таблица со следующими разделами: Имя пользователя и ссылка на его страницу; количество комментариев в пределах группы; количество "лайков" записей группы; количество репостов записей этой-же группы; количество сообщений, оставленных пользователем на стене группы.
    Общий принцип мне виделся таким; нужно получить полный html код странички группы, и банально искать в нем нужные теги, отвечающие за ту или иную активность пользователя. Принцип оказался рабочим, но, увы, лишь на треть: в сохраненном html коде страницы без проблем можно найти всех пользователей и их комментарии:
    Код html:
      <div class="gedit_user_info fl_l">
        <div class="gedit_user_name"><a exuser="true" class="gedit_user_lnk" href="http://vk.com/id196037383">Катюша Кутилина</a><a onmousedown="event.cancelBubble = true;" onclick="pupShow(event,'196037383_106','196037383',this); return false;" class="vk_usermenu_btn" id="pup196037383_106">▼&nbsp;</a></div>
        <div class="gedit_user_online">Online</div>
        <div class="gedit_user_btns"></div>
      </div>
    Код html:
    <div class="reply_text"> <a exuser="true" class="author" href="http://vk.com/iha4you" data-from-id="217778464">Максим Максимов</a><a onmousedown="event.cancelBubble = true;" onclick="pupShow(event,'iha4you_3015','iha4you',this); return false;" class="vk_usermenu_btn" id="pupiha4you_3015">▼&nbsp;</a> <div id="wpt-56116141_1225"><div class="wall_reply_text">Не вижу смысла больше писать ноунеймеру и в следующих постах тоже .</div></div> </div>
    Но вот информация о том, кто именно лайкал, и кто именно репостил каждое из сообщений содержится в чем-то, вроде скриптов, поэтому в html коде самом по себе такой информации нет. Это выглядит примерно так:
    Код html:
    <div class="like_wrap fl_r has_dislike" onclick="wall.like('-56116141_wall_reply1225', '03cf48aa93e52be852'); event.cancelBubble = true;" onmouseover="wall.likeOver('-56116141_wall_reply1225')" onmouseout="wall.likeOut('-56116141_wall_reply1225')"> <span class="like_link fl_l" id="like_link-56116141_wall_reply1225">Мне нравится</span> <i class="no_likes fl_l" id="like_icon-56116141_wall_reply1225"></i> <span class="like_count fl_l" id="like_count-56116141_wall_reply1225"></span>
    Мне очень интересен вопрос, каким образом можно вытянуть автоматически весь полный html код группы, вместе с всплывающими подсказками и прочим? Чтобы потом я мог его распарсить, и получит всю нужную мне статистику?
    У меня есть два подозрения насчет моего вопроса:
    1. Я делаю велосипед.
    Это фактически аскиома . Но это меня не останавливает, ибо мне неизвестны свободные и бесплатные инструменты, которые могут помочь с этим, собственно, по гуглингу даже платных я не нашел.
    2. Я делаю не так.
    Я выбрал паскаль для реализации парсера, но это еще ничего. Опытный web-программист, наверное, улыбнется, если узнает, что я вручную сохраняю из браузера html код нужных мне страниц, чтобы потом вытянуть из них нужную мне информацию
    В целом, как я понимаю, эта задача более разумно решает с использованием какого-либо web-ориентированного языка программирования. Что-то мне подсказывает, что с этой задачей позволит справится javascript.
    Но опыта web-разработки у меня нет, поэтому я совершенно ни в чем не уверен.
    Собственно, вопрос мой такой: каким образом разумно сделать то, что я описал? На какие инструменты обратить внимание? И есть ли возможность получить полную информацию о странице, не меняя моего подхода с отдельным парсером html-кода?
    Буду рад любым подсказкам по этому вопросу.
    Дружба-магия-радость!
    Ответить с цитированием  
     

  2. #2  
    Супер модератор Аватар для >Quiet Snow<
    Регистрация
    11.04.2011
    Адрес
    Планета земля
    Сообщений
    3,913
    Сказал(а) спасибо
    1,842
    Поблагодарили 977 раз(а) в 835 сообщениях
    Записей в блоге
    1
    Вот тут простой код на VB, с помощью которого можно загрузить страницу: http://www.cyberforum.ru/post1591231.html
    В нём видно какие WinAPI и как юзать.

    Проще не нашёл, портаж на FreePascal думаю не так сложен, только типы данных проверить и значения констант.
    Дальше чистая работа со строками.

    Но проблема как понимаю не в этом.
    Обучение прикладному программированию(по skype), качественно, недорого, 18+, вопросы в личку.
    «Если вы ничего не сделаете, я уверяю вас, ничего и не произойдёт» © Жак Фреско
    Ограниченно модерирую.
    Ответить с цитированием  
     

  3. #3  
    Профи Аватар для Dimon012
    Регистрация
    09.02.2011
    Адрес
    Владивосток
    Сообщений
    850
    Сказал(а) спасибо
    29
    Поблагодарили 130 раз(а) в 108 сообщениях
    Записей в блоге
    3
    Цитата Сообщение от >Quiet Snow< Посмотреть сообщение
    Дальше чистая работа со строками.
    Небольшая ремарка. Из всех известных мне языков, работа с текстовыми строками лучше всего реализована в Паскале.
    Ответить с цитированием  
     

  4. #4  
    Супер модератор Аватар для >Quiet Snow<
    Регистрация
    11.04.2011
    Адрес
    Планета земля
    Сообщений
    3,913
    Сказал(а) спасибо
    1,842
    Поблагодарили 977 раз(а) в 835 сообщениях
    Записей в блоге
    1
    Скачал FreePascal, потыкал потыкал, - портанул, не знаю может быть есть какие-то нюансы, надо смотреть
    но полагаю Абядябер разберётся. Симпатичный паскальчик, IDE прям точь в точь запилено, чтут традиции.

    Код pascal:
    {$APPTYPE CONSOLE}
    Uses Wininet, Crt;
    Const
      INTERNET_OPEN_TYPE_DIRECT = 1;
      INTERNET_OPEN_TYPE_PROXY = 3;
      INTERNET_FLAG_RELOAD = $80000000;
      scUserAgent = 'IP_API_Loader';
      sURL = 'http://ya.ru/';
    Var
      hOpen : Pointer;
      hFile : Pointer;
      sBuffer  : String;
      Ret   : LongWord;
     
      Function Space(n : Integer) : String;
      Var i : Integer;
          NStr : String;
      Begin
          For i := 1 To n Do Begin
             NStr := Concat(NStr, ' ');
          End;
          Space := NStr;
      End;
     
    Begin
      ClrScr;
      WriteLn('Trying Get HTML...');
           {Буфер для хранения информации}
         sBuffer := Space(30);
           {Соединяемся с интернетом}
         hOpen := InternetOpenA (scUserAgent, INTERNET_OPEN_TYPE_DIRECT, '', '', 0);
           {Заходим на нужный сайт}
         hFile := InternetOpenUrl (hOpen, sURL, '', 0, INTERNET_FLAG_RELOAD, 0);
           {Считываем первые 20 байт информации}
         InternetReadFile (hFile, @sBuffer, 30, Ret);
           {Закрываем соединения}
         InternetCloseHandle (hFile);
         InternetCloseHandle (hOpen);
      WriteLn('HTML page : ', sBuffer);
      Repeat Until Keypressed;
     
    END.
    Обучение прикладному программированию(по skype), качественно, недорого, 18+, вопросы в личку.
    «Если вы ничего не сделаете, я уверяю вас, ничего и не произойдёт» © Жак Фреско
    Ограниченно модерирую.
    Ответить с цитированием  
     

  5. Пользователь сказал cпасибо:

    Абадябер (18.11.2013)

  6. #5  
    Гуру Аватар для Абадябер
    Регистрация
    09.12.2010
    Адрес
    Беларусь, Минск
    Сообщений
    1,219
    Сказал(а) спасибо
    302
    Поблагодарили 176 раз(а) в 144 сообщениях
    Записей в блоге
    5
    >Quiet Snow<, спасибо за код, обязательно с ним поиграюсь. Ситуация осложнится тем, что придется логиниться на сайте через этот-же код, прежде чем получится загрузить что-то дельное, но тут уж буду сам думать.
    Дружба-магия-радость!
    Ответить с цитированием  
     

  7. #6  
    Супер модератор Аватар для >Quiet Snow<
    Регистрация
    11.04.2011
    Адрес
    Планета земля
    Сообщений
    3,913
    Сказал(а) спасибо
    1,842
    Поблагодарили 977 раз(а) в 835 сообщениях
    Записей в блоге
    1
    что придется логиниться на сайте через этот-же код
    Этот код только скачивает кусок страницы(30 байт, но можно и больше, в коде видно эту 30-ку).
    Чтобы отправить запрос серверу и получить отклик думается нужен код посерьёзнее.
    Т.е. код что выше это как бы ВУ прослойка, которая всё за нас делает(посылает запрос на страницу, ждёт сервер,
    получает ответ). Т.е. по реалу идёт как раз геморное подключение к серверу через всякие там сёкеты.

    Сетевое программирование кстати дичайше сложное, сам наверное его никогда не освою, это просто писец.
    Но копать скорее всего нужно на предмет POST и GET запросов к веб серверу.

    Вижу такую библиотеку: http://curl.haxx.se/libcurl/pascal/
    Но её надо поковырять конкретно. Код думается тоже можно найти, надо разгуглиться посильнее))).
    Слабо верится что удастся найти что-то сильно простое, но этот curl поковырять советую, в инете пишут
    что вроде можно им отправлять запросы и получать данные с сервера.

    Что такое эти запросы: http://www.myfirstsite.ru/articles/get-and-post
    Статейка на хабре по запросам: http://habrahabr.ru/post/50147/

    А уж ломать вконтакт этими штуками задача так для кул хакера))).
    Обучение прикладному программированию(по skype), качественно, недорого, 18+, вопросы в личку.
    «Если вы ничего не сделаете, я уверяю вас, ничего и не произойдёт» © Жак Фреско
    Ограниченно модерирую.
    Ответить с цитированием  
     

  8. #7  
    Профи Аватар для rrrFer
    Регистрация
    01.08.2013
    Сообщений
    561
    Сказал(а) спасибо
    34
    Поблагодарили 249 раз(а) в 164 сообщениях
    Жесть какая. Госпади.

    Этот код только скачивает кусок страницы(30 байт, но можно и больше, в коде видно эту 30-ку).
    Чтобы отправить запрос серверу и получить отклик думается нужен код посерьёзнее.
    Чтобы отправить запрос серверу - банально пишешь в сокет POST/GET запрос. Нет ничего проще.

    Вижу такую библиотеку: [Ссылки могут видеть только зарегистрированные пользователи. ]
    ребят, не надо ковырять CURL, он не для этих целей написан. Можно конечно микроскопом орехи колоть, но колоть будет не так удобно как молотком. Если хотите спарсить сайт - получайте страницу (через сокеты) и парсите. Хотите отправить запрос - отправляйте через сокеты

    Кроме того, есть более удобные библиотеки... (ну чтобы сокеты не использовать) - например, тут почитать можно: [Ссылки могут видеть только зарегистрированные пользователи. ] (для С++, Qt). Но парсеры/грабберы чаще на Питонах всяких пишут (там более удобно).

    А самое главное....
    [Ссылки могут видеть только зарегистрированные пользователи. ]
    читали? - у вконтакте есть АПИ, которое должно упрощать жизнь
    [Ссылки могут видеть только зарегистрированные пользователи. ] // программирование на Prolog, Erlang, C++
    Ответить с цитированием  
     

  9. #8  
    Гуру Аватар для Абадябер
    Регистрация
    09.12.2010
    Адрес
    Беларусь, Минск
    Сообщений
    1,219
    Сказал(а) спасибо
    302
    Поблагодарили 176 раз(а) в 144 сообщениях
    Записей в блоге
    5
    Ребята, вновь большое спасибо вам за замечания и советы. Некоторые я возьму на вооружение, другие приму к сведенью.
    Мне тут, к слову, наш хороший знакомый посоветовал сервис [Ссылки могут видеть только зарегистрированные пользователи. ], который как раз создан для сбора интересующей меня статистики. К сожалению, там не совсем так, как я-бы хотел видеть, поэтому я вяло продолжу колупать эту тему
    Дружба-магия-радость!
    Ответить с цитированием  
     

  10. Пользователь сказал cпасибо:

    pingvin (19.11.2013)

  11. #9  
    Модератор Аватар для pingvin
    Регистрация
    11.02.2011
    Сообщений
    389
    Сказал(а) спасибо
    80
    Поблагодарили 75 раз(а) в 48 сообщениях
    Да, кстати, этот знакомый уже залил статистику [Ссылки могут видеть только зарегистрированные пользователи. ] в нашу группу вконтакте
    На этом месте могло быть Ваше "Спасибо"
    Ответить с цитированием  
     

  12. Пользователь сказал cпасибо:

    Абадябер (20.11.2013)

Информация о теме
Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Накрутка подписчиков вконтакте плюсы и минусы
    от sof в разделе Социальные сети
    Ответов: 2
    Последнее сообщение: 17.12.2013, 09:59
  2. Группа Вконтакте
    от Konstantin Shcherba в разделе Архив
    Ответов: 5
    Последнее сообщение: 15.09.2013, 10:10
  3. Аккаунт Вконтакте с 86 000руб на РЕКЛАМУ
    от gusilebedi в разделе Другие товары
    Ответов: 2
    Последнее сообщение: 12.09.2013, 21:11
  4. Инвайт для Вконтакте.
    от Kakos_nonos в разделе Флейм
    Ответов: 7
    Последнее сообщение: 06.05.2011, 19:15
Ваши права
  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •