Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
0 / 0 / 0
Регистрация: 19.05.2015
Сообщений: 9

Нужен парсер нескольких страниц сайта

09.01.2016, 22:14. Показов 2120. Ответов 12

Студворк — интернет-сервис помощи студентам
Доброго времени суток! Проблема в следующем: есть сайт
Кликните здесь для просмотра всего текста
http://ru.kkb.kz/page/RatesConvertingOld
, с которого надо спарсить несколько страниц и всё бы ничего, но вот проблема, на сайте интересующая информация нужна за определенный период времени (есть html-ные кнопки выбора интересующей даты). Вот как задать интересующий меня интервал, а главное, потом спарсить необходимую информацию? Может знатоки подскажут?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.01.2016, 22:14
Ответы с готовыми решениями:

Парсинг сайта (нескольких страниц)
Подскажите пожалуйста, как сделать парсинг веб сайта ? к примеру возьмем cyberforum. Как мне в программе по разделу C# для начинающих,...

Парсер сайта, копирование нескольких переменных по одному условию
Добрый день! Столкнулся с проблемой, в исходном коде сайта есть: <td class=td_field>-</td> <td...

Подключение нескольких страниц сайта к одной БД
Здраствуйте! У меня на сайте есть несколько страниц, на которых собираюсь добавлять информацию через БД. Можно ли как-то сделать 1 файл...

12
 Аватар для edward_freedom
1569 / 1448 / 303
Регистрация: 01.10.2011
Сообщений: 2,636
09.01.2016, 22:33
Лучший ответ Сообщение было отмечено Speedyjet как решение

Решение

Speedyjet, Можно отправить запрос на
с такими параметрами
day=6&month=3&year=2000
В ответ получишь страницу, а там уже парсиш как хочешь
1
0 / 0 / 0
Регистрация: 19.05.2015
Сообщений: 9
09.01.2016, 22:49  [ТС]
спасибо большое, а как их передавать? Простите за нубский вопрос. В строке адреса параметрами указать?
0
 Аватар для edward_freedom
1569 / 1448 / 303
Регистрация: 01.10.2011
Сообщений: 2,636
09.01.2016, 22:52
Лучший ответ Сообщение было отмечено Speedyjet как решение

Решение

Speedyjet,
1
0 / 0 / 0
Регистрация: 19.05.2015
Сообщений: 9
12.01.2016, 09:50  [ТС]
как-то не получается выдрать оттуда названия валюты и её курс, выдает какую-то крокозябру.

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
using System;
using System.Drawing.Text;
using System.Text;
using System.Windows.Forms;
using xNet;
 
namespace WindowsFormsApplication2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            string s = Convert.ToString(GetCountPages());
            MessageBox.Show(s);
        }
        
        private string GetRates(int Num)
        {
            try
            {
                using (var Request = new HttpRequest())
                {
 
 
                    string SourcePage;
                    SourcePage = Request.Get("http://ru.kkb.kz/page/RatesConvertingOld" + Num).ToString();
                }
            }
            catch (Exception ex)
            {
                
                MessageBox.Show(Convert.ToString(ex));
            }
            return null;
        }
        private string GetCountPages()
        {
            string countpages = null;
            try
            {
                using (var request = new HttpRequest())
                {
                    var urlParams = new RequestParams();
                    urlParams["day"] = 6;
                    urlParams["month"] = 3;
                    urlParams["year"] = 2000;
                    request.CharacterSet = Encoding.UTF8;
                    string SourcePage;
                    SourcePage = request.Get("http://ru.kkb.kz/page/RatesConvertingOld",urlParams).ToString();
                    countpages = Convert.ToString(SourcePage.Substring("<td>", "&nbsp;</td>", 0)[0]);
                    //<td>1</td> 13 =>[12] <td>141.07&nbsp;</td>
                }
            }
            catch (Exception ex)
            {
 
                MessageBox.Show(Convert.ToString(ex));
            }
            return countpages;
        }
    }
}
0
Модератор
Эксперт функциональных языков программирования
3136 / 2283 / 469
Регистрация: 26.03.2015
Сообщений: 8,886
12.01.2016, 10:31
Цитата Сообщение от Speedyjet Посмотреть сообщение
как-то не получается выдрать оттуда названия валюты и её курс, выдает какую-то крокозябру.
кто выдаёт? какую крокозябру?
0
0 / 0 / 0
Регистрация: 19.05.2015
Сообщений: 9
12.01.2016, 10:44  [ТС]
C#
1
MessageBox.Show(s);
пытаюсь получить результат, который находится в классе .tbl_text2 между двух тегов <td>", "&nbsp;</td> а выдаёт какие-то непонятные символы
0
Модератор
Эксперт функциональных языков программирования
3136 / 2283 / 469
Регистрация: 26.03.2015
Сообщений: 8,886
12.01.2016, 11:08
Лучший ответ Сообщение было отмечено edward_freedom как решение

Решение

Цитата Сообщение от Speedyjet Посмотреть сообщение
пытаюсь получить результат, который находится в классе .tbl_text2 между двух тегов <td>", "&nbsp;</td> а выдаёт какие-то непонятные символ
Страница нормально скачалась?

Пример:
Вы говорите, что не можете забросить чемодан на верхнюю полку. Мы тут даём Вам советы. А в итоге выясняется, что Вы на поезд опоздали, и поэтому не можете забросить чемодан на верхнюю полку.

Добавлено через 1 минуту
Полагаю, что Вы скачали страницу не в той кодировке. Но почему я должен гадать, когда Вам достаточно поставить точку прерывания и посмотреть значение переменной? А код, который Вы привели, даже не компилируется.

Добавлено через 3 минуты
Вот этот код:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
WebClient client = new WebClient();
client.Encoding = Encoding.UTF8;
string reply = client.DownloadString (@"http://ru.kkb.kz/page/RatesConvertingOld?day=6&month=3&year=2000");
//Console.WriteLine (reply);
 
HtmlDocument document = new HtmlDocument();
document.LoadHtml(reply);
var nodes = document.DocumentNode.QuerySelectorAll("table.tbl_text2 tr");
var table = nodes.Select(x => x.QuerySelectorAll("td").Select(y => y.InnerText).ToArray()).Skip(2).Take(8);
foreach(var row in table)
{
    if(!row[0].StartsWith("1 ")) continue;
    Console.WriteLine("{0}: {1} - {2}", row[0], row[3], row[4]);
}
Выводит:
Code
1
2
3
4
5
6
7
1 USD/KZT день в день: 140.92 - 141.25
1 USD/KZT на второй день: 140.99 - 141.18
1 USD/KZT на третий день: 141.06 - 141.11
1 EUR/KZT: 134.43 - 135.89
1 USD/EUR: 0.9530 - 0.963
1 RUB/KZT: 4.91 - 4.95
1 GBP/USD: 1.58 - 1.59
Код использует NuGet package Fizzler for HtmlAgilityPack.
2
0 / 0 / 0
Регистрация: 19.05.2015
Сообщений: 9
13.01.2016, 16:48  [ТС]
большое спасибо за ответ
0
0 / 0 / 0
Регистрация: 19.05.2015
Сообщений: 9
21.01.2016, 11:03  [ТС]
столкнулся с проблемой того, что у них на сайте различаются ноды по датам вывода, а именно, до 10.01.2015 одни, дальше идут другие. Не подскажете как их выбрать?
Цитата Сообщение от Shamil1 Посмотреть сообщение
var nodes = document.DocumentNode.QuerySelectorAll(" table.tbl_text2 tr");
var table = nodes.Select(x => x.QuerySelectorAll("td").Select(y => y.InnerText).ToArray()).Skip(2).Take(8);
с ранними всё хорошо, а вот потом никак не могу понять как инфу выцарапать?
0
Модератор
Эксперт функциональных языков программирования
3136 / 2283 / 469
Регистрация: 26.03.2015
Сообщений: 8,886
21.01.2016, 12:13
Какую информацию на какой странице (урл?) у Вас не получается достать?
0
0 / 0 / 0
Регистрация: 19.05.2015
Сообщений: 9
21.01.2016, 14:23  [ТС]
да, извините, не указал.
дело в том, что на сайте разметка меняется в зависимости от даты. Не получается спарсить http://ru.kkb.kz/page/RatesCon... &year=2015

Добавлено через 1 час 35 минут
В общем, на сайте, в зависимости от даты меняется дерево DOM, а я, увы, слишком плохо разбираюсь в нодах и поэтому при попытке спарсить что-либо начиная с 10.01.2015 у меня ничего не получается. ссыль на гитхаб
0
Модератор
Эксперт функциональных языков программирования
3136 / 2283 / 469
Регистрация: 26.03.2015
Сообщений: 8,886
21.01.2016, 16:24
Ничего особо не поменялось. Вместо метода GET теперь нужно использовать POST.
А знать DOM Вам и не нужно. Там есть таблица со стилем "tbl_text2", и QuerySelectorAll("table.tbl_text2 tr") выбирает все строки этой таблицы. Дальше смотрите сами, что Вам нужно в этой таблице.

Код:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
WebClient client = new WebClient();
client.Encoding = Encoding.UTF8;
client.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded";
var reply = client.UploadString(@"http://ru.kkb.kz/page/RatesConvertingOld", "day=15&month=1&year=2015&view=Показать");
 
HtmlDocument document = new HtmlDocument();
document.LoadHtml(reply);
var nodes = document.DocumentNode.QuerySelectorAll("table.tbl_text2 tr");
var table = nodes.Select(x => x.QuerySelectorAll("td").Select(y => y.InnerText).ToArray()).Skip(11);
 
foreach(var row in table)
{
    Console.WriteLine("{0}: {1}", row[0].PadRight(30), row[3].Replace("&nbsp;", "").PadLeft(10));
}
Выводит:
Code
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
Евро                          :     216.17
Доллар США                    :     183.80
Английский фунт стерлингов    :     279.65
Российский рубль              :       2.82
Кыргызский сом                :       3.07
Австралийский доллар          :     151.18
Азербайджанский манат         :     235.55
Белорусский рубль             :       1.21
Бразильский реал              :      70.26
Венгерский форинт             :       6.79
Гонконгский доллар            :      23.70
Датская крона                 :      29.07
Дирхам ОАЭ                    :      50.04
Индийская рупия               :       2.98
Канадский доллар              :     153.83
Китайский юань                :      29.71
Кувейтский динар              :     624.96
Литовский лит                 :           
Малазийский ринггит           :      51.63
Молдавский лей                :      11.22
Норвежская крона              :      23.97
Польский злотый               :      50.79
Риял Саудовской Аравии        :      48.97
СДР                           :     262.72
Сингапурский доллар           :     138.19
Таджикский сомони             :      35.63
Тайский бат                   :       5.61
Турецкая лира                 :      80.73
Украинская гривна             :      11.65
Узбекский сум                 :       7.58
Чешская крона                 :       7.69
Шведская крона                :      22.73
Швейцарский франк             :     180.07
Южно-африканский ранд         :      16.02
Южно-корейские воны           :      17.06
Японская йена                 :       1.56
Армянский драм                :       3.87
Грузинский лари               :      96.62
Иранский риал                 :       6.72
Мексиканский песо             :      12.67
Золото, унц.                  :  226993.00
Серебро, унц.                 :    3527.12
Палладий, унц.                :  161927.80
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.01.2016, 16:24
Помогаю со студенческими работами здесь

301 редирект для нескольких страниц сайта
Приветствую! Немного о пациенте. Стоит nginx/0.7.65. Необходимо настроить 301 редирект с нескольких страниц сайта на подобные...

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

Парсер страниц
Доброго времени суток. В общем, нужно достать инфу из исходного кода страницы. S :=...

Парсер страниц
всем привет. подскажите вариант исполнения или код: дано - список улов страниц в текстовом файле. надо брать по очереди урлы и в тексте...

Парсер страниц VK
Здравствуйте. Возникла необходимость создать парсер, который сохраняет аватарку пользователя vk по указанному id. Если у пользователя...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru