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

Парсер страницы

14.10.2016, 22:42. Показов 2113. Ответов 25
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день.
Обращаюсь к специалистам, так как сам не понимаю в парсинге ничего.

Помогите спарсить страницу
http://webmon9.betfred.com/num... slng=SIS49

нужны результаты в текстовый файл с таким видом:

02 - 43 32 17 31 20 11 16
01 - 21 05 18 11 28 46 47
---
---
---

знаю только основу, а как HTML разбирать по частям не знаю.
нужно для дела, помогите кто может


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
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.IO;
 
 
namespace parser
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            button1.Enabled = false;
 
 
            string url = "http://webmon9.betfred.com/numbers/results/index.asp?slng=SIS49";
 
            try
            {
                WebClient client = new WebClient();
                client.DownloadProgressChanged += new System.Net.DownloadProgressChangedEventHandler(client_DownloadProgressChanged);
                client.Encoding = System.Text.Encoding.UTF8;
                client.DownloadStringCompleted += (sender, e) =>
                {
                    if (!e.Cancelled && e.Error == null)
                    {
                        result = e.Result;
                        button1.Enabled = true;
                        button1.PerformClick();
                    }
                };
 
                client.DownloadStringAsync(new Uri(url));
                client.Dispose();
 
            }
            catch 
            {
 
                MessageBox.Show("----");
            }
 
           
        }
 
 
 
 
 
        string result = string.Empty;
 
        private void button1_Click(object sender, EventArgs e)
        {
 
            FileStream fs = new FileStream(Application.StartupPath + "\\ball.txt", FileMode.Create);
 
            StreamWriter streamWriter = new StreamWriter(fs);
 
           
            var doc = new HtmlAgilityPack.HtmlDocument();
            doc.LoadHtml(result);
            
           // ---
           // --- код, который не знаю!!!
           // ---
 
            streamWriter.Close();
            fs.Close();
            streamWriter.Dispose();
            fs.Dispose();
      
            MessageBox.Show("----");
 
 
          
        }


не перевариваю парсинг, не понимаю его

библиотеку HtmlAgilityPack вообще не знаю
со строками никогда не работал

этот парсер понадобился просто, программа можно сказать готова, тормоза с данными для неё
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.10.2016, 22:42
Ответы с готовыми решениями:

Парсер страницы сайта с добавлением результатов в DGV
Добрый вечер! Как написать простейший парсер на C#? Можно ли объяснить на примере парсера количество боев этого игрока...

Парсер, не полный код страницы
Добрый день, не могу понять в чем проблема. Таким образом, как показано ниже, загружаю код страницы вк. Затем вывожу данный код в .txt и он...

Парсер картинки со страницы и сохранение на диск
Имеется страница сайта, на которой кроме 1 картинки ничего нет. Как на C# сохранить эту картинку? P.S.: сорри за нубство(

25
 Аватар для ViterAlex
8951 / 4863 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
15.10.2016, 14:10
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
static void Main(string[] args)
{
    string htmlPage;
    using (var client = new WebClient())
    {
        htmlPage = client.DownloadString(new Uri("http://webmon9.betfred.com/numbers/results/index.asp?slng=SIS49"));
    }
    var doc = new HtmlDocument();
    doc.LoadHtml(htmlPage);
    using (TextWriter writer = new StreamWriter("lottoresults.txt"))
    {
        foreach (HtmlNode node in doc.DocumentNode.SelectNodes("//tr[starts-with(@class,'row')]"))
        {
            var line = node.InnerText.Replace("\r\n", " ");
            line = line.Replace(" Draw ", string.Empty).Replace("  "," ");
            line = line.Insert(2, " —");
            writer.WriteLine(line);
        }
    }
    //Console.Read();
}
1
0 / 0 / 0
Регистрация: 14.10.2016
Сообщений: 23
15.10.2016, 16:14  [ТС]
Спасибо, буду пробовать.

Добавлено через 1 час 22 минуты
Цитата Сообщение от ViterAlex Посмотреть сообщение
var doc = new HtmlDocument();
когда нет базы, начинаешь "мыкаться"
не определяется, что нужно добавить?

Добавлено через 1 минуту
Цитата Сообщение от ViterAlex Посмотреть сообщение
using (TextWriter writer = new StreamWriter("lottoresults.txt"))
эта строчка тоже подчёркивается
0
 Аватар для ViterAlex
8951 / 4863 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
15.10.2016, 16:29
Цитата Сообщение от aleks-123 Посмотреть сообщение
не определяется, что нужно добавить?
Ну как же? Ты же использовал HtmlAgilityPack. В заголовке пропиши:
C#
1
using HtmlAgilityPack;
Цитата Сообщение от aleks-123 Посмотреть сообщение
эта строчка тоже подчёркивается
C#
1
using System.IO;
1
0 / 0 / 0
Регистрация: 14.10.2016
Сообщений: 23
15.10.2016, 16:59  [ТС]
я подключил ссылкой HtmlAgilityPack;
пишется что конструктор не определён

а когда добавляю using HtmlAgilityPack;
то неоднозначная ссылка


ViterAlex а Вы бы не могли вставить недостающие строки в код с начала страницы?
0
 Аватар для ViterAlex
8951 / 4863 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
15.10.2016, 17:12
Там в начале только using. Весь проект в архиве. С подключённым через NuGet HtmlAgilityPack
Вложения
Тип файла: zip BetfredParser.zip (1.62 Мб, 13 просмотров)
1
0 / 0 / 0
Регистрация: 14.10.2016
Сообщений: 23
15.10.2016, 17:29  [ТС]
ViterAlex, спасибо за отзывчивость.
Мне нужно устанавливать фреймворк 4.5, сейчас не установлю, скорость инета не позволяет.
Может перекомпилируете под фреймворк 4?

В любом случае спасибо, буду разбираться.
Что нибудь получится. Информации достаточно.
0
 Аватар для ViterAlex
8951 / 4863 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
15.10.2016, 17:43
Пожалуйста
Вложения
Тип файла: zip BetfredParser.zip (1.61 Мб, 8 просмотров)
1
0 / 0 / 0
Регистрация: 14.10.2016
Сообщений: 23
15.10.2016, 18:56  [ТС]
Работает.
Есть ли где документация на русском по HtmlAgilityPack?

Ещё вопрос, числа 1,2,3,...9
как вывести в текст в таком виде: 01, 02, 03,...09

Добавлено через 1 час 4 минуты

ViterAlex, вместо этого
//var doc = new HtmlDocument();

поставил это
var doc = new HtmlAgilityPack.HtmlDocument();

и всё, заработало в коде, который приспособил по вашему примеру!

50 строчек данных с парсера маловато
интересно, как изменить адрес запроса, чтобы парсер "хватал", скажем, с января?
сейчас только за 15 дней
внизу страницы регулятор, а вот как адрес прописать? никто не знает?
0
 Аватар для ViterAlex
8951 / 4863 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
15.10.2016, 19:02
Цитата Сообщение от aleks-123 Посмотреть сообщение
Ещё вопрос, числа 1,2,3,...9
как вывести в текст в таком виде: 01, 02, 03,...09
  1. Разобрать на отдельные числа
  2. для каждого числа вызвать метод ToString("D2")
  3. собрать обратно в строку
Цитата Сообщение от aleks-123 Посмотреть сообщение
документация на русском по HtmlAgilityPack
Централизовано вряд ли она где-то переведена. Проект опенсорсный, следовательно, лучше всего его документацию вести на английском. Ищи отдельные статьи и примеры в том числе на этом форуме
0
0 / 0 / 0
Регистрация: 14.10.2016
Сообщений: 23
15.10.2016, 19:18  [ТС]
понятно, ViterAlex, подскажи до кучи, как адрес прописать, чтобы парсер больше данных грузил?
со страницы, что в примере, там только за 15 дней, желательно больше
0
 Аватар для ViterAlex
8951 / 4863 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
15.10.2016, 19:38
Цитата Сообщение от aleks-123 Посмотреть сообщение
как адрес прописать, чтобы парсер больше данных грузил
Тут дело не в парсере. Диапазон дат выбирается внизу страницы и затем запускается скрипт по кнопке. Тут надо думать. Есть способы сделать это программно, но я такого пока не делал
1
0 / 0 / 0
Регистрация: 14.10.2016
Сообщений: 23
15.10.2016, 20:00  [ТС]
я думал что можно в самом адресе задать
from=...to=... длинный адрес получается, где-то видел
а программа смотрит последний тираж на сайте, затем смотрит что загружено последнее в самой программе, вычисляет недостающие тиражи, и затем формирует адрес запроса. Как то так.

Спасибо ещё раз за пример. Получилось приспособить.
0
 Аватар для ViterAlex
8951 / 4863 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
15.10.2016, 21:26
Цитата Сообщение от aleks-123 Посмотреть сообщение
я думал что можно в самом адресе задать
from=...to=... длинный адрес получается, где-то видел
Там в форме используется метод post, поэтому напрямую через адресную строку отправить не получится, но можно подсмотреть формат данных и засунуть его в WebBrowser через postData:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
var postData = string.Format("nDayFrom={0}&" +
                            "nMonthfrom={1}&" +
                            "nYearfrom={2}&" +
                            "nDayto={3}&" +
                            "nMonthto={4}&" +
                            "nYearto={5}&" +
                            "xSubmit=Find+draws&slng=SIS49",
                            fromDateTimePicker.Value.Day,
                            fromDateTimePicker.Value.Month,
                            fromDateTimePicker.Value.Year,
                            toDateTimePicker.Value.Day,
                            toDateTimePicker.Value.Month,
                            toDateTimePicker.Value.Year);
_browser.Navigate(new Uri("http://webmon9.betfred.com/numbers/results/index.asp"), string.Empty, Encoding.UTF8.GetBytes(postData), "Content-Type: application/x-www-form-urlencoded");
Затем из браузера взять страницу и распарсить уже знакомым способом
Вложения
Тип файла: zip BetfredParserForms.zip (11.0 Кб, 3 просмотров)
1
0 / 0 / 0
Регистрация: 14.10.2016
Сообщений: 23
16.10.2016, 07:55  [ТС]
интересно, то что нужно
красиво получается у тебя ViterAlex, и код компактный
добавлю кнопку выгрузки в файл текстовый, и всё, готово!

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

например

16.10.2016 2 12 13 14 15 16 17 18
16.10.2016 1 19 20 21 22 23 24 25
15.10.2016 2 26 27 28 29 30 31 32
15.10.2016 1 33 34 35 36 37 38 39
---
---
---

было бы вообще круто!

Добавлено через 35 минут
дата не обязательно в таком виде, главное чтобы можно было понять какой год и число, можно и без разделительных знаков в дате
0
 Аватар для ViterAlex
8951 / 4863 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
16.10.2016, 12:23
Лучший ответ Сообщение было отмечено aleks-123 как решение

Решение

aleks-123, требования возрастают, значит нужно немного усложнить (а на самом деле упростить) архитектуру приложения. Сделаем класс, описывающий результаты лотереи:
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
public class BetfredResult
{
    public int Draw { get; set; }
    public int[] Results { get; set; }
    public DateTime Date { get; set; }
    [DisplayName("Result")]
    public string ResultsString
    {
        get
        {
            return Results == null ? string.Empty : string.Join(" ", Results.Select(v => v.ToString("d2")));
        }
    }
 
    public int Booster { get; set; }
 
    public BetfredResult(string drawLine)
    {
        string[] numbers = drawLine.Split(new[] { '—', ' ' }, StringSplitOptions.RemoveEmptyEntries);
        Results = new int[6];
        int[] values = numbers.Select((s, i) => int.Parse(s)).ToArray();
        Draw = values.First();
        Booster = values.Last();
        Array.Copy(values, 1, Results, 0, Results.Length);
    }
 
    #region Overrides of Object
 
    public override string ToString()
    {
        return string.Format("{0:dd.MM.yyyy} {1:d2} {2} {3:d2}", Date, Draw, ResultsString, Booster);
    }
 
    #endregion
}
Вложения
Тип файла: zip BetfredParserForms.zip (13.3 Кб, 5 просмотров)
1
0 / 0 / 0
Регистрация: 14.10.2016
Сообщений: 23
16.10.2016, 14:06  [ТС]
ViterAlex, не знаю что бы и делал без тебя, так точно бы не сделал.

У меня были не требования, а пожелания, так сказать, сильно то и не надеялся
Честно говоря не думал что сделаешь, да ещё в проекте готовом. Учёл даже формат D2.
Огромное спасибо! Главное чтобы теперь сайт этот не заблокировали, а то в последнее время блокируют всё подряд, что связано с букмекерами.

Теперь мне остаётся дописать программу для игры, ну здесь уже сам, логику могу более менее нормально кодить.
Конечно, нужно с C# более вплотную заняться. Для моих увлечений хватает тех небольших навыков, а вот с парсингом полный ноль.

Выиграю тыщи ... ,
свяжусь, отблагодарю, так сказать!

Пример нужно твой изучить и понять.
0
0 / 0 / 0
Регистрация: 14.10.2016
Сообщений: 23
16.10.2016, 14:51  [ТС]
заметил, что дата обрывается
не знаю разберусь или нет, может через пару месяцев))
главное что начальные нормально
Изображения
 
0
 Аватар для ViterAlex
8951 / 4863 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
16.10.2016, 15:54
Обрывается если диапазон дат захватывает два года? Эту ситуацию я не обрабатывал.
0
0 / 0 / 0
Регистрация: 14.10.2016
Сообщений: 23
16.10.2016, 16:10  [ТС]
да, если устанавливаю 2-3 года, обрывается на начале 2016
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.10.2016, 16:10
Помогаю со студенческими работами здесь

Парсер страницы
Добрый день, обращаюсь за помощью к вам. Я уже всю голову сломал, помогите спарсить часть вот этой страницы:...

парсер html страницы
Здраствуйте есть вот такой участок кода static public String getSomeUrl(final String url) throws URISyntaxException, IOException,...

Парсер веб страницы
Доброго времени суток. Я недавно увлекся программированием на дельфи, и прошу вас помочь, желательно кодом и его объяснением (Хотя бы линк...

Парсер с php страницы
Имеется вот такая php страничка http://betcityru.com/live/results.php Мне нужно брать с этой страницы всё, кроме кнопок меню и кнопки...

Простой парсер страницы
господа, помогите с кодом парсера. есть страница http://kanevskayatv.ru/10kanal/ мне надо написать парсер, котрый выведет эту страницу...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru