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

Парсинг с сайта

12.11.2017, 17:20. Показов 35542. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Не могу никак понять, как парсить "неопределённую" информацию с сайта. Вот допустим количество блогов на cyberforum'е спарсить могу, а как спарсить ну допустим расписание с сайта: день недели, номер пары, название, преподаватель.
Миниатюры
Парсинг с сайта  
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
12.11.2017, 17:20
Ответы с готовыми решениями:

Парсинг сайта
Добрый день, господа. Ситуация такая, что не удается получить html-код со страницы. Использую следующий алгоритм: using System;...

Парсинг Сайта
Товарищи эксперты, помогите решить проблему с парсингом. Есть сайт tv.mail.ru, при разборе кода выявил свойство <div...

Парсинг сайта
Подскажите пожалуйста чем лучше всего парсить сайты? что-бы было просто и легко. Html Agility Pack xNet Или еще чем-то. Нужно...

16
9 / 8 / 5
Регистрация: 13.05.2015
Сообщений: 253
12.11.2017, 19:29  [ТС]
Ну или всю таблицу спарсить
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18298 / 14222 / 5368
Регистрация: 17.03.2014
Сообщений: 28,900
Записей в блоге: 1
12.11.2017, 21:49
Mr_Asdshka, где здесь "неопределённая информация"? Виден номер, название предмета и ФИО преподавателя. Структура документа простая. Получаем строки в таблице (tr) и выбираем данные из ячеек (td). Чем ты пользуешься для парсинга сейчас?
0
9 / 8 / 5
Регистрация: 13.05.2015
Сообщений: 253
17.11.2017, 14:28  [ТС]
Цитата Сообщение от OwenGlendower Посмотреть сообщение
где здесь "неопределённая информация"? Виден номер, название предмета и ФИО преподавателя. Структура документа простая. Получаем строки в таблице (tr) и выбираем данные из ячеек (td). Чем ты пользуешься для парсинга сейчас?
Прошу прощения, за то, что так поздно, дело в том, что я был в отъезде. Расписание меняется.
C#
1
2
3
4
5
6
7
string html;
using (var Client = new WebClient { Encoding = Encoding.Default })
{
    html = Client.DownloadString("https://www.cyberforum.ru/");
}
 
Match Match = Regex.Match(html, @"Блоги: (\d+)", RegexOptions.Singleline);
Я не понимаю как выбрать конкретный "элемент" / "блок" для того, чтобы парсить его
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18298 / 14222 / 5368
Регистрация: 17.03.2014
Сообщений: 28,900
Записей в блоге: 1
17.11.2017, 14:45
Mr_Asdshka, регулярки подходят для сравнительного простого html парсинга. В более сложных лучше использовать специализированные библиотеки. Самые популярные это HtmlAgilityPack (XML/XPath) и AngleSharp (CSS-селекторы). Если скажешь адрес сайта или выложишь его html код, то набросаю примеры.
0
9 / 8 / 5
Регистрация: 13.05.2015
Сообщений: 253
17.11.2017, 15:09  [ТС]
https://pastebin.com/V8iTyHHm буду благодарен
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18298 / 14222 / 5368
Регистрация: 17.03.2014
Сообщений: 28,900
Записей в блоге: 1
18.11.2017, 22:06
Лучший ответ Сообщение было отмечено Mr_Asdshka как решение

Решение

Mr_Asdshka, примерно так. Нужно еще дорабатывать код чтобы делать выборку для конкретных групп, но идея здесь видна
HtmlAgilityPack
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
string address = Encoding.ASCII.GetString(Convert.FromBase64String("aHR0cHM6Ly9tcHQucnUvc3R1ZGVudHUvcmFzcGlzYW5pZS16YW55YXRpeS8="));
string html;
using (var client = new WebClient())
{
    client.Headers.Add(HttpRequestHeader.UserAgent, ".NET Application");
    client.Encoding = Encoding.UTF8;
    html = client.DownloadString(address);
}
 
// HtmlAgilityPack
var htmlDoc = new HtmlDocument();
htmlDoc.LoadHtml(html);
var tdNodes = htmlDoc.DocumentNode.SelectNodes("//div[@class='tab-content']/div[@role='tabpanel'][1]//td");
for (int i=0; i<tdNodes.Count; i+=3)
{
    Console.WriteLine(tdNodes[i+1].InnerText + ", " + tdNodes[i+2].InnerText);
}


AngleSharp
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
string address = Encoding.ASCII.GetString(Convert.FromBase64String("aHR0cHM6Ly9tcHQucnUvc3R1ZGVudHUvcmFzcGlzYW5pZS16YW55YXRpeS8="));
string html;
using (var client = new WebClient())
{
    client.Headers.Add(HttpRequestHeader.UserAgent, ".NET Application");
    client.Encoding = Encoding.UTF8;
    html = client.DownloadString(address);
}
 
// AngleSharp
var htmlDoc = new HtmlParser().Parse(html);
var tdElements = htmlDoc.QuerySelectorAll(".tab-content > div.active[role='tabpanel'] td");
for (int i=0; i<tdElements.Length; i+=3)
{
    Console.WriteLine(tdElements[i+1].TextContent + ", " + tdElements[i+2].TextContent);
}
1
1 / 1 / 0
Регистрация: 22.07.2019
Сообщений: 39
26.07.2019, 13:36
Научите парсить плиз. Допустим нужно чтобы с https://www.banki.ru/products/currency/usd/ выводилось в textbox только значение курса ЦБ. К примеру 63,16. Что я делаю не так?
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
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Net;
using AngleSharp;
using System.IO;
using System.Xml;
using AngleSharp.Dom;
 
namespace Парсер
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        public void Form1_Load(object sender, EventArgs e)
        {
        }
 
        private void Form1_Shown(object sender, EventArgs e)
        {
        }
 
        private void RichTextBox1_TextChanged(object sender, EventArgs e)
        {
            WebClient client = new WebClient();
            Stream stream = client.OpenRead("https://www.banki.ru/products/currency/usd/");
            StreamReader sr = new StreamReader(stream);
            string newLine;
            string ss = "";
            while ((newLine = sr.ReadLine()) != null)
            {
                ss += newLine;
            }
            //<div class="currency-table__large-text">63,12</div>
            String Rate = Regex.Match(ss, @"<div class=""currency - table__large - text"">([0-9])</div>").Groups[1].Value;
            richTextBox1.Text = Rate;
            stream.Close();
        }
 
        private void Button1_Click(object sender, EventArgs e)
        {
        }
    }
}
0
3566 / 2507 / 1174
Регистрация: 14.08.2016
Сообщений: 8,219
26.07.2019, 13:49
C#
1
.Match(ss, @"<div class=""currency - table__large - text"">(\d+[,.]?\d*)</div>").Groups[1].Value;
примерно так
1
1 / 1 / 0
Регистрация: 22.07.2019
Сообщений: 39
26.07.2019, 14:01
И почему даже пробелы не убираются из спарсенного текста...
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
      WebClient client = new WebClient();
            client.Encoding = System.Text.Encoding.UTF8;
            Stream stream = client.OpenRead("https://www.banki.ru/products/currency/usd/");
            StreamReader sr = new StreamReader(stream);
            string newLine;
            string ss = "";
            while ((newLine = sr.ReadLine()) != null)
            {
                ss += newLine;
            }
            string ss1 = ss.Replace(" ", "");
            //<div class="currency-table__large-text">63,12</div>
            String Rate = Regex.Match(ss, @"<div class=""currency - table__large - text"">([0-9])</div>").Groups[0].Value;
            richTextBox1.Text = ss1;
            stream.Close();
Добавлено через 2 минуты
не трудно расписать популярно что делает эта строка... это же anglesharp?

Добавлено через 1 минуту
1
.Match(ss, @"<div class=""currency - table__large - text"">(\d+[,.]?\d*)</div>").Groups[1].Value;

что к чему, чтоб я понял.

Добавлено через 17 секунд
1
.Match(ss, @"<div class=""currency - table__large - text"">(\d+[,.]?\d*)</div>").Groups[1].Value;

что к чему, чтоб я понял.

Добавлено через 3 минуты
И все равно не работает ... не выводит ничего.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
WebClient client = new WebClient();
            client.Encoding = System.Text.Encoding.UTF8;
            Stream stream = client.OpenRead("https://www.banki.ru/products/currency/usd/");
            StreamReader sr = new StreamReader(stream);
            string newLine;
            string ss = "";
            while ((newLine = sr.ReadLine()) != null)
            {
                ss += newLine;
            }
            string ss1 = ss.Replace(" ", "");
            String Rate = Regex.Match(ss, @"<div class=""currency - table__large - text"">(\d+[,.]?\d*)</div>").Groups[1].Value;
            richTextBox1.Text = Rate;
            stream.Close();
0
3566 / 2507 / 1174
Регистрация: 14.08.2016
Сообщений: 8,219
26.07.2019, 14:02
это регулярное выражениеРегулярные выражения FAQ
0
1 / 1 / 0
Регистрация: 22.07.2019
Сообщений: 39
26.07.2019, 14:07
А почему не работает то?

Добавлено через 2 минуты
Все что в скобках я понял (по рег.выражениям). Не пойму почему не выводит ничего...

Добавлено через 56 секунд
а также не могу понять почему эта строка string ss1 = ss.Replace(" ", ""); не убирает пробелы...
0
3566 / 2507 / 1174
Регистрация: 14.08.2016
Сообщений: 8,219
26.07.2019, 14:19
C#
1
2
3
4
5
6
7
8
9
10
            WebClient client = new WebClient();
            client.Encoding = System.Text.Encoding.UTF8;
            string ss;
            using (Stream stream = client.OpenRead("https://www.banki.ru/products/currency/usd/"))
            {
                using (StreamReader sr = new StreamReader(stream))
                    ss = sr.ReadToEnd();
            }
            String Rate = Regex.Match(ss, @"<div class=""currency-table__large-text"">(\d+,\d+)</div>").Groups[1].Value;
            richTextBox1.Text = Rate;
1
1 / 1 / 0
Регистрация: 22.07.2019
Сообщений: 39
26.07.2019, 14:24
Diamante, огромное спасибо, теперь работает! Сча буду разбираться что к чему... А еще почему не считывает страницы например с таких адресов https://ru.investing.com
0
1 / 1 / 0
Регистрация: 22.07.2019
Сообщений: 39
27.07.2019, 01:48
Как сюда вставить ссылку на файлообменник? Не отображается...
0
27.07.2019, 08:54

Не по теме:

Ivan_CS, загружайте файл(ы) на форум. Под окном редактора есть кнопка "Управление вложениями", а в расширенном режиме редактирования в редакторе есть кнопка со скрепкой с той же функциональностью.

0
1 / 1 / 0
Регистрация: 22.07.2019
Сообщений: 39
27.07.2019, 15:18
Вот такой первый мой парсер получился благодаря Diamante. Проверьте плиз у себя в регионе норм ли работает геолокация, все ли правильно отображается. У меня в Нижнем Новгороде все пашет. Город должен определятся Ваш и выгодные курсы должны быть банков вашего города с названиями.
Вложения
Тип файла: rar Выгодный курс доллара_2.rar (249.7 Кб, 235 просмотров)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
27.07.2019, 15:18
Помогаю со студенческими работами здесь

Парсинг сайта
Хочу пропарсить сайт, на котором через некоторое время появляются элементы в виде div-ов. Эти дивы мне и нужно получить. Их там много может...

Парсинг сайта
Добрый день! Не могли бы помочь сделать Парсинг с сайта http://stroymat-rzn.org/stroitelnye-materialy-prajs-list.html Есть код , но он...

Парсинг сайта
Имеется страница с примерно следующим содержимым ... &lt;div class=&quot;main random&quot;&gt; &lt;b&gt;1&lt;/b&gt; &lt;b&gt;123&lt;/b&gt; ...

Парсинг с сайта
Здравствуйте. Не могу понять, как правильно спарсить: название, картинку,описание и версию. Буду благодарен за любую помощь. ...

Парсинг сайта
Здравствуйте. Помогите пожалуйста решить следующую проблему. При парсинге я выбираю информацию по определенному классу в HTML, например w1....


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[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
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru