Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.04.2016, 14:30   #1
fanat_96
Пользователь
 
Регистрация: 09.04.2016
Сообщений: 81
По умолчанию Получить размер раздачи

Здравствуйте. Я написал парсер, который собирает нужную мне информацию о фильме с трекера Рутор. Но есть одна проблема - он совершенно неправильно получает размер файла.

Код HTML:
<tr><td class="header">Залил</td><td><b><a href="/browse/0/0/1085435/0" target="_blank">JIuI3epIIyJIb</a></b></td></tr>
<tr><td class="header">Оценка</td><td>6 из 10 (4 голосов, самая низкая оценка - 1, самая высокая - 10)</td></tr>
<tr><td class="header">Категория</td><td><a href="/kino" target="_blank">Зарубежные фильмы</a></td></tr>
<tr><td class="header">Раздают</td><td>1195</td></tr>
<tr><td class="header">Качают</td><td>274</td></tr>
<tr><td class="header">Сидер замечен</td><td>09-04-2016 13:19:05 (18 минут назад)</td></tr>
<tr><td class="header">Добавлен</td><td>08-04-2016 14:26:57  (23 часа назад)</td></tr>
<tr><td class="header">Размер</td><td>1.42&nbsp;GB  (1524303872 Bytes)</td></tr>
Меня интересует размер, указанный в последней строке. Необходимо как-нибудь дойти до этой ячейки и получить 1.42 GB

Парсер этот текст получил и записал в текстовый файл в виде: Размер4.84&nbsp;GB (5196844997 Bytes)

Я пытался искать его так:
Код:
string size_prim = "Размер";
int sizeLenght = size_prim.Length;
if (line.Contains(size_prim))
                {


                    size = line.Substring(sizeLenght);

                }
Но вся беда в том, что он выдает мне совершенно не то, что нужно. Кроме того, такой способ не будет работать, если на странице слово "Размер" повторяется больше 1 раза.
Может кто-нибудь правильный способ подсказать?
fanat_96 вне форума Ответить с цитированием
Старый 09.04.2016, 14:39   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Возьмите HTML парсер типа HtmlAgilityPack (XPath запросы), будет намного проще и надежнее.

http://programmersforum.ru/showthrea...59#post1437627
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 09.04.2016 в 14:53.
Alex11223 вне форума Ответить с цитированием
Старый 09.04.2016, 16:46   #3
fanat_96
Пользователь
 
Регистрация: 09.04.2016
Сообщений: 81
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Возьмите HTML парсер типа HtmlAgilityPack (XPath запросы), будет намного проще и надежнее.

http://programmersforum.ru/showthrea...59#post1437627
Его я и использую для парсинга блока с информацией. Но я понятия не имею как мне добраться конкретно до последней строчки с размером, чтобы его оттуда вытащить
fanat_96 вне форума Ответить с цитированием
Старый 09.04.2016, 17:01   #4
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Например так:
Код:
//tr/td[contains(@class, 'header') and text()='Размер']/following-sibling::td
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 09.04.2016, 17:39   #5
fanat_96
Пользователь
 
Регистрация: 09.04.2016
Сообщений: 81
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Например так:
Код:
//tr/td[contains(@class, 'header') and text()='Размер']/following-sibling::td
Получилось такое:

Код:
using (HttpClientHandler handler = new HttpClientHandler() { AllowAutoRedirect = true, AutomaticDecompression = System.Net.DecompressionMethods.GZip | System.Net.DecompressionMethods.Deflate })
            {
                using (HttpClient client = new HttpClient(handler) { BaseAddress = new Uri("http://rutor.is/") })
                {
                    HtmlAgilityPack.HtmlDocument HD = new HtmlAgilityPack.HtmlDocument();
                    HD.LoadHtml(client.GetStringAsync("/torrent/497533/da-zdravstvuet-cezar!_hail-caesar!-2016-webrip-zvuk-s-ts").Result); 
                    var element = HD.DocumentNode.SelectSingleNode("//tr/td[contains(@class, 'header') and text()='Размер']/following-sibling::td");//искомый элемент
                    richTextBox1.Text = element.InnerText;
                    var size = richTextBox1.Text.Split(new string[] {"(" }, StringSplitOptions.RemoveEmptyEntries)[0];
                    MessageBox.Show(size);
                }

            }
На выходе получаю: 1.42&nbsp;GB
Может вы знаете как этот код пробела заменить нормальным пробелом? Пытался с помощью метода HttpUtility.HtmlDecode, но студия не видит класс HttpUtility. У меня 15, если что. Не хочется тупо замену символов в строке делать, как-то неправильно что ли
fanat_96 вне форума Ответить с цитированием
Старый 09.04.2016, 17:42   #6
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Для HttpUtility надо System.Web добавить в References.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 09.04.2016, 17:48   #7
fanat_96
Пользователь
 
Регистрация: 09.04.2016
Сообщений: 81
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Для HttpUtility надо System.Web добавить в References.
Код:
using System.Web;
Но это не помогло, он все равно не видит класс этот
fanat_96 вне форума Ответить с цитированием
Старый 09.04.2016, 17:49   #8
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

какая версия дотнета в проекте?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 09.04.2016, 17:53   #9
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Не в using (но и туда тоже), а в References.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 09.04.2016, 17:54   #10
fanat_96
Пользователь
 
Регистрация: 09.04.2016
Сообщений: 81
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
какая версия дотнета в проекте?
4.5.2

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Не в using (но и туда тоже), а в References.
Помогло, спасибо!

Последний раз редактировалось Alex11223; 09.04.2016 в 18:03.
fanat_96 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Получить размер Scroll'a Дmmm Общие вопросы Delphi 5 02.12.2014 12:43
Как получить размер dds-файла? RibGeDx Общие вопросы Delphi 8 16.03.2013 20:56
Как получить размер базы данных Greek9000 Общие вопросы .NET 1 02.08.2011 13:49
Как получить размер строки типа LPCWSTR? Gtx541 Общие вопросы C/C++ 1 30.05.2010 14:18
Получить размер диапазона в сантиметрах Саня_Д Microsoft Office Excel 2 28.09.2009 18:11