Форум программистов, компьютерный форум, киберфорум
C++: Сети
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/18: Рейтинг темы: голосов - 18, средняя оценка - 4.78
 Аватар для noob c++
3 / 3 / 0
Регистрация: 11.07.2011
Сообщений: 49

Парсинг страницы [Visual Studio 08]

14.08.2011, 07:41. Показов 3229. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет всем
Как можно спарсить список игр со страницы с играми в steamcommunity.com ?
Страница со списком игр (пример): http://steamcommunity.com/prof... es?tab=all
Больше интересует не сам код, а вообще принцип этого парсинга.
Тут наверно работа с сокетами и GET\POST запросы. Если где-то есть статья или еще что-то, которая может помочь в решении данной задачи - прошу поделиться. С таким еще не сталкивался. Буду очень признателен за помощь.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.08.2011, 07:41
Ответы с готовыми решениями:

Установка C++ Redistributable Visual Studio 2017 и Visual C++ для Visual Studio 2015
Доброго дня. Пытаюсь изучить PHP. Решил установить сервер локальный. В инструкции сказано: "Ещё нам нужен файл C++...

Настройка домашней страницы в Visual Studio 2013 Ultimate
Всем привет Если тут есть люди которые работают в Visual Studio 2013 Ultimate, помогоите с начальной страницей. Каким образом ее можно...

Можно ли программировать вэб-страницы в Visual Studio 2017?
можно ли программированить вэб страницы в visual studio 2017? сам не нашёл, сори. Если да, то как называется? П.с. вёрстка сайтов не будет...

6
 Аватар для Kastaneda
5232 / 3206 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
14.08.2011, 10:35
Почитай про WinInet.h
Не надо обладать какими-то знаниями, чтобы понять как с этим работать. Там все интуитивно понятно - загружаешь страницу в файл, а дальше парсишь ее как хочешь)
1
 Аватар для xAtom
935 / 760 / 299
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
14.08.2011, 20:20
Цитата Сообщение от Kastaneda Посмотреть сообщение
Там все интуитивно понятно - загружаешь страницу в файл
Для того чтобы расспарсить страницу не нужно прибегать к помощи файла что ram мало чтоли, вот накидал код по быстрому парсирует весь список названия игр с указанной тобой страницы.
C++
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#include <winsock2.h>
#include <string.h>
#include <iostream>
using namespace std;
#pragma comment(lib, "ws2_32.lib")
 
 
int   main(void) {
 
       sockaddr_in  addr;
       SOCKET    client;
       char    blk[4096];  // буфер скачивания в 4-KB
       hostent*  host  = NULL;
 
       WSADATA  data;
       if(WSAStartup(MAKEWORD(2, 0), &data) != 0) 
           exit(-1);
       system("color 17");
 
      memset(&addr, 0, sizeof(sockaddr_in));
      addr.sin_family  = AF_INET;
      addr.sin_port  = htons( 80 );  
      host  = gethostbyname( "steamcommunity.com"); // адресок по-имени хоста
      memcpy(&addr.sin_addr, host->h_addr_list[0], host->h_length);
    
      client = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
      if(client == INVALID_SOCKET)
           exit(-1);
       
      if(connect(client, (sockaddr*)&addr, sizeof(sockaddr_in)) == SOCKET_ERROR) {
           closesocket(client); 
           exit(-1);
      }
 
      cout << "Connection server..." << endl;
 
      memset(blk, 0, sizeof(blk));
      // вот HTTP-запрос страницы для скачивания
      strcpy(blk, "GET http://steamcommunity.com/profiles/76561197988225967/" \
                     "games?tab=all HTTP/1.0\r\n");
      strcat(blk, "Host: www.steamcommunity.com\r\n\r\n");
 
      if(send(client, blk,  sizeof(blk), 0) == SOCKET_ERROR) {
             closesocket(client);   
             exit(-1);      
      }
      Sleep(200u);
      cout << "Loaden page..." << endl;  
 
     string   buf      = "";
     int  result  = 0;
     while(1) {
          result = recv(client, blk, sizeof(blk), 0);
          if(result > 0) {
               buf.append(blk);
               if(buf.find("<body>") > 0) // значения находяться в шапке, если уже тело выходим отсюда
                      break;
               }  else if(result == SOCKET_ERROR) {
                     cerr << "Error socket !!!" << endl;
                     break;
               } else 
                     break;
     }
     closesocket(client);
     WSACleanup();
     system("cls");
     system("color 04");
 
    // вот сам парсинг 
     const char* str  = buf.c_str();
     char*  iter;
     while(1) {
            str = strstr(str, "rgGames[");
            if(! str)
                break;
            str = strchr(str, '=');
            if(! str)
                break;
            str += 3;
            iter  = blk;
            while( *str != '\'' && *str) {
                 *iter = *str++;
                 ++iter;
            }
            *iter = '\0';
            cout << '\t' << blk << endl;
            strset(blk, '\0');
      }
 
      cin.get();
      return  0;
}
2
 Аватар для noob c++
3 / 3 / 0
Регистрация: 11.07.2011
Сообщений: 49
16.08.2011, 06:38  [ТС]
Не могли бы вы прокомментировать поподробнее код вашей программы. Мне не так важен сам код, как понять ход написания программы.
И как можно сделать так чтобы парсилась не одна страница из кода, а чтобы в richtextbox можно было вводить 10 и более страниц и парсить их.
0
6 / 6 / 1
Регистрация: 16.02.2011
Сообщений: 45
28.08.2011, 21:27
Цитата Сообщение от noob c++ Посмотреть сообщение
Не могли бы вы прокомментировать поподробнее код вашей программы. Мне не так важен сам код, как понять ход написания программы.
И как можно сделать так чтобы парсилась не одна страница из кода, а чтобы в richtextbox можно было вводить 10 и более страниц и парсить их.
Присоединяюсь к вопросу @ апаю тему @ реквестирую подробности парсинга
0
 Аватар для ArtemKrass
8 / 8 / 1
Регистрация: 21.11.2012
Сообщений: 133
24.11.2012, 17:00
Мне тоже интересен этот вопрос!
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
24.11.2012, 18:58
Устанавливаешь boost, и парсишь с помощью boost/regex, а загружать страницу можно boost/asio.
Примеров по форуму полно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.11.2012, 18:58
Помогаю со студенческими работами здесь

В коде возникли ошибки при переходе с Visual studio 2013 на Visual studio 2017
Добрый день, решил попробовать поменять свою 2013 студию на 2017 и заметил такую проблему, при открытии проектов 13 года и даже копирования...

Visual Studio 2005 и Visual Studio 2008 сильно ли они отличаются друк от друга?
привет ребята:) вот у меня есть Visual Studio 2005 и Visual Studio 2008 возник вопрос сильно ли они отличаются друк от друга? пробывал...

Зачем для создания формы на Angular использовать Visual Studio и Visual Studio Code?
Мне нужно написать форму на ангуляре, которая будет выполнять Select, Insert,Delete из базы данных. Нашла видео, в котором показывают...

Имеются ли отличия в компиляторах у сред разработки Visual Studio 2006 и Visual Studio 2015 ?
скажите а где найти среду 2006 года? или можно использовать 2015 год?

Будет ли всегда программа написанная на Visual Studio 2010 открываться в Visual Studio 2003 ?
Будет ли всегда программа написанная на Visual Studio 2010 открываться в Visual Studio 2003 ?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru