Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 3
Регистрация: 24.05.2012
Сообщений: 93

Получить список всех категорий и подкатегорий Яндекс.Маркета

28.10.2014, 22:55. Показов 1566. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пишу парсер ЯМаркета. Нужно получить список всех категорий. Пытаюсь рекурсивно обойти все ссылки, но не могу придумать как. Метод начинает перебирать ссылки и на первой ссылке, на глубине 3 вложенности стопорится. Привожу код метода, может поможет кто.

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
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
        public void GetCats ( string url = null )
        {
            this.Cats.Clear ( );
 
            if ( url != null )
            {
                this.URL = this.BaseURL + url;  
            }
            else
            {
                this.URL = @"http://market.yandex.ru/catalog.xml";
            }
 
            CookieContainer cookieCont = new CookieContainer ( );
            // создаем объект для запроса к Яндекс.Маркету
            HttpWebRequest request = ( HttpWebRequest ) WebRequest.Create ( this.URL );
            request.CookieContainer = cookieCont;
 
            // указываем случайный прокси из списка
            foreach ( var item in this.Proxys )
            {
                Random r = new Random ( );
                int i = r.Next ( 0, this.Proxys.Count - 1 );
                try
                {
                    WebProxy proxy = new WebProxy ( this.Proxys[ i ].Split ( ':' )[ 0 ].Trim ( ), int.Parse ( this.Proxys[ i ].Split ( ':' )[ 1 ].Trim ( ) ) );
                    request.Proxy = proxy;
                    break;
                }
                catch
                {
                    continue;
                }
            }
 
            // маскируемся под браузер
            request.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)" ;
 
 
            HttpWebResponse response = ( HttpWebResponse ) request.GetResponse ( );
            string content = new StreamReader ( response.GetResponseStream ( ), Encoding.UTF8 ).ReadToEnd ( );
 
            // создаем объект для парсинга
            HtmlDocument doc = new HtmlDocument ( );
 
            // грузим ответ сервиса в парсер
            doc.LoadHtml ( content );
 
            //File.WriteAllText ( "content.txt", content );
 
            // ищем ссылки на категории
            HtmlNodeCollection  a = doc.DocumentNode.SelectNodes ( "//div[@class='supcat guru']" );
            HtmlNodeCollection  span = doc.DocumentNode.SelectNodes ( "//div[@class='supcat']" );
 
            try
            {
                foreach ( var item in span )
                {
                    a.Add ( item ); 
                }
            }
            catch
            {
                //
            }
 
            List<string> list = new List<string> ( );
 
            string name;
            if ( url != null )
            {
                name = this.URL.Substring ( this.URL.IndexOf ( '=' ) + 1 );
            }
            else
            {
                name = "root";
            } 
 
            int t = 1;
            foreach ( var item in a )
            {
                string href = item.ChildNodes[ 0 ].Attributes[ "href" ].Value;
                string text = item.ChildNodes[ 0 ].InnerText;
 
                if ( url != null )
                {
                    list.Add ( "INSERT INTO `sub_cats` (`id`, `name`, `link`, `cat_id`) VALUES (" + this.j.ToString ( ) + ", '" + text + "', '" + href + "', " + name + ");" );
                    this.j++;
                }
                else
                {
                    list.Add ( "INSERT INTO `cats` (`id`, `name`, `link`) VALUES (" + href.ToString ( ).Substring ( this.URL.IndexOf ( '=' ) + 1 ) + ", '" + text + "', '" + href + "');" );
                }
                this.Cats.Add ( text, href );
                t++;
            }
 
            if ( !Directory.Exists( "cats" ))
            {
                Directory.CreateDirectory ( "cats" );   
            }
            File.WriteAllLines ( Path.Combine("cats", name + ".sql"), list );
 
 
            foreach ( var item in this.Cats.Values )
            {
                try
                {
                    GetCats ( item );
                }
                catch
                {
                    continue;
                }
            }
 
 
        }
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
28.10.2014, 22:55
Ответы с готовыми решениями:

Вывод категорий и подкатегорий
Приветствую, господа! Нужна помощь! Есть код: while($result1 = mysql_fetch_array($choose_category)) { $disksCategory...

Организация категорий и подкатегорий
Здравствуйте! :) Вопрос следующий: как создать каталоги, далее подкаталоги, и затем конечные страницы? Ну, то есть, к примеру:...

Поиск категорий и подкатегорий
Здравствуйте, подскажите пожалуйста, как сделать подобный поиск на wp, формируя http://site.ru/doctor/МЕТРО - выбрано только метро ...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.10.2014, 22:55
Помогаю со студенческими работами здесь

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

Kohana вывод категорий и подкатегорий
Здравствуйте! В общем суть вопроса такова: Есть две таблицы : 'ads' (объявления) и 'categories' Использую ORM, в модели...

Вывести напротив категорий диапазоны подкатегорий
Доброе время суток! помогите!!! Необходимо вывести напротив категорий диапазоны подкатегорий формулой.

Вывод категорий/подкатегорий на страницу сайта
PHP не изучал вообще, но знаком с разными языками программирования, поэтому правлю элементарные вещи в PHP без проблем. Появилась...

Вывод категорий/подкатегорий статей и создание url
Привет. Существует таблица &quot;article_category&quot;, в ней следующая структура: id | name | slug | parent_id id - это уникальный айди...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru