Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
 Аватар для Alexandr_7
87 / 22 / 6
Регистрация: 29.12.2015
Сообщений: 1,891
.NET 4.x

Выдернуть некоторые строчки текста из сайта включая ссылки

18.05.2018, 12:09. Показов 1405. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
К примеру есть сайт вот часть его кода

Как выдернуть от туда выделенную строчку. Думаю чтобы выдернуть ссылку хватит и одного примера.
Нужен способ который бы не открывал при этом страницы если и открывал то не показывал это пользователю. Видел я 1 компонент который давал возможность выдерать элемент по указанию тегов в котором этот элемент находится но этот компонент на виду открывает сайт при этом открывая его через браузер по умолчанию что меня не устраивает.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.05.2018, 12:09
Ответы с готовыми решениями:

Массивы указателей: вставить после i-ой строчки текста копию j-ой строчки того же текста
Текст дан массивом показателей на строчки длиной н символов. Общая размерность массива-д. Если строчек меньше чем д,то последние элементы...

Главная функция (вводит некоторые значения и передает их и ссылки на некоторые переменные в функцию)
Написать главную функцию, которая вводит некоторые значения и передает их и ссылки на некоторые переменные в функцию. Получив результаты...

Как выдернуть ссылки из мемо
В мемо загружен файл примерно такого вида : История игр Улдаоыдвлаыа... ..... .аыва.. ... Ссылка -...

13
Эксперт .NET
 Аватар для Usaga
14122 / 9341 / 1350
Регистрация: 21.01.2016
Сообщений: 35,102
18.05.2018, 13:20
Alexandr_7, вам поможет библиотека HtmlAgilityPack или AngleSharp. Они ничего не отрывают, просто качают указанный документ (по ссылке или с диска) и парсят его указанным вами образом (примеры сами ищите).

Можно и вручную это сделать, но это будет дольше и смысла в этом нет.
0
 Аватар для Alexandr_7
87 / 22 / 6
Регистрация: 29.12.2015
Сообщений: 1,891
18.05.2018, 16:36  [ТС]
Никак не могу найти инфу по AngleSharp.
То что я нарыл и пытался сделать
C#
1
2
3
4
5
6
7
8
9
10
var parser = new HtmlParser();
            var doc = parser.Parse("http://www.kamremake.com/ru/download/");
 
            var div = doc.QuerySelector("div.entry-content");
 
            var p = div.QuerySelector("p");
 
            var text = p.QuerySelector("strong");
 
            return p.TextContent;
То div равен null видимо из за того что начинать надо не с какогонить любого div а с самого начального

Но чета мне подсказывпает что поиск p и strong у меня неправильно все равно
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18260 / 14185 / 5366
Регистрация: 17.03.2014
Сообщений: 28,871
Записей в блоге: 1
18.05.2018, 17:27
Лучший ответ Сообщение было отмечено Alexandr_7 как решение

Решение

Alexandr_7, метод Parse принимает html, а не ссылку. Нужно скачать текст сайта и передавать его в метод Parse(). Например так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
string html;
using (var webClient = new WebClient())
{
    webClient.Encoding = Encoding.UTF8;
    webClient.Headers.Add(HttpRequestHeader.UserAgent, ".NET Application");
    html = webClient.DownloadString("http://www.kamremake.com/ru/download/");
}
var parser = new HtmlParser();
var doc = parser.Parse(html);
 
var text = doc.QuerySelectorAll("div.entry-content strong").SingleOrDefault(el => el.TextContent.Contains("Последняя версия:"));
 
return text.TextContent;
Добавлено через 2 минуты
Цитата Сообщение от OwenGlendower Посмотреть сообщение
C#
11
var text = doc.QuerySelectorAll("div.entry-content strong").SingleOrDefault(el => el.TextContent.Contains("Последняя версия:"));
Эту строку можно переписать так
C#
11
var text = doc.QuerySelector(".entry-content > p:nth-child(5) > strong");
1
 Аватар для Alexandr_7
87 / 22 / 6
Регистрация: 29.12.2015
Сообщений: 1,891
18.05.2018, 17:43  [ТС]
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Alexandr_7, метод Parse принимает html, а не ссылку. Нужно скачать текст сайта и передавать его в метод Parse(). Например так:
Спасибо работает. Реально выручил. Жалко на сайте не предусмотренно выдернуть сразу версию. Версию прийдется из этой строки извлекать.
0
 Аватар для Alexandr_7
87 / 22 / 6
Регистрация: 29.12.2015
Сообщений: 1,891
19.05.2018, 14:18  [ТС]
И так возникли трудности. Есть какаянибудь особенность парсить a эллементы так как ссылка хранится в a элементе с кучей параметров


Еще больший вопрос как сделать скачку по такой вот ссылке желательно с показом процеса скачки ибо файл большой гдето 350 МБ.
0
 Аватар для Alexandr_7
87 / 22 / 6
Регистрация: 29.12.2015
Сообщений: 1,891
19.05.2018, 14:32  [ТС]
Предположим я понял как получить ссылку
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
string GetLinkKMR()
        {
            string html;
            using (var webClient = new WebClient())
            {
                webClient.Encoding = Encoding.UTF8;
                webClient.Headers.Add(HttpRequestHeader.UserAgent, ".NET Application");
                html = webClient.DownloadString("http://www.kamremake.com/download/");
            }
            var parser = new HtmlParser();
            var doc = parser.Parse(html);
            var Link = doc.QuerySelector(".entry-content > p:nth-child(6) > a.download-button[href]");
            var text = Link.GetAttribute("href");
            return text;
        }
Но как скачать файл по данной ссылке так как из ссылки видно что она не прямая на файл
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18260 / 14185 / 5366
Регистрация: 17.03.2014
Сообщений: 28,871
Записей в блоге: 1
19.05.2018, 14:32
Лучший ответ Сообщение было отмечено Alexandr_7 как решение

Решение

Цитата Сообщение от Alexandr_7 Посмотреть сообщение
Есть какаянибудь особенность парсить a эллементы так как ссылка хранится в a элементе с кучей параметров
Получаем элемент a и читаем значение атрибута href. Вот и все "особенности".
C#
1
var downloadAddress = doc.QuerySelector("a.download-button").GetAttribute("href");
Цитата Сообщение от Alexandr_7 Посмотреть сообщение
Еще больший вопрос как сделать скачку по такой вот ссылке желательно с показом процеса скачки ибо файл большой гдето 350 МБ.
Смотри пример в описании события WebClient.DownloadProgressChanged
1
 Аватар для Alexandr_7
87 / 22 / 6
Регистрация: 29.12.2015
Сообщений: 1,891
19.05.2018, 14:45  [ТС]
Ссылка на пример что вы мне дали я чет не понял. Почему 2 одинаковых события
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
private static void UploadProgressCallback(object sender, UploadProgressChangedEventArgs e)
{
    // Displays the operation identifier, and the transfer progress.
    Console.WriteLine("{0}    uploaded {1} of {2} bytes. {3} % complete...", 
        (string)e.UserState, 
        e.BytesSent, 
        e.TotalBytesToSend,
        e.ProgressPercentage);
}
private static void DownloadProgressCallback(object sender, DownloadProgressChangedEventArgs e)
{
    // Displays the operation identifier, and the transfer progress.
    Console.WriteLine("{0}    downloaded {1} of {2} bytes. {3} % complete...", 
        (string)e.UserState, 
        e.BytesReceived, 
        e.TotalBytesToReceive,
        e.ProgressPercentage);
}
а здесь определяются совсем другие события

Например как должно выглядить метод для DownloadFileCallback2 непонятно

C#
1
2
3
4
5
// Specify that the DownloadFileCallback method gets called
    // when the download completes.
    client.DownloadFileCompleted += new AsyncCompletedEventHandler (DownloadFileCallback2);
    // Specify a progress notification handler.
    client.DownloadProgressChanged += new DownloadProgressChangedEventHandler(DownloadProgressCallback);
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18260 / 14185 / 5366
Регистрация: 17.03.2014
Сообщений: 28,871
Записей в блоге: 1
19.05.2018, 14:55
Цитата Сообщение от Alexandr_7 Посмотреть сообщение
Но как скачать файл по данной ссылке так как из ссылки видно что она не прямая на файл
Напрасно беспокоишься. Файл по ссылке нормально качается. Там происходит редирект на настоящий адрес.

Цитата Сообщение от Alexandr_7 Посмотреть сообщение
Ссылка на пример что вы мне дали я чет не понял.
Все очень просто.
1) Подписывается на событие DownloadProgressChanged - оно срабатывает при получении новой порции данных; там и обновляем progress.
2) Подписываемся на событие DownloadFileCompleted - оно срабатывает когда закачка закончена.
3) Запускаем загрузку с помошью DownloadFileAsync. Держим в уме что он запускает закачку, но не ждет её завершения и сразу возвращает управление. Поэтому все действия после закачки нужно выполнять в обработчике события DownloadFileCompleted
0
 Аватар для Alexandr_7
87 / 22 / 6
Регистрация: 29.12.2015
Сообщений: 1,891
19.05.2018, 14:58  [ТС]
Еще вопрос. скачка выполняется в отдельном потоке или надо самому в отдельный поток ее помещать.
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18260 / 14185 / 5366
Регистрация: 17.03.2014
Сообщений: 28,871
Записей в блоге: 1
19.05.2018, 15:00
Alexandr_7, закачка идет в отдельном потоке из ThreadPool
0
 Аватар для Alexandr_7
87 / 22 / 6
Регистрация: 29.12.2015
Сообщений: 1,891
09.06.2018, 20:10  [ТС]
А как вот это выдернуть?

Нужно выдернуть 2 ссылки. Полного пакета и обновления. Просто в теории это так делается
C#
1
doc.QuerySelector(".entry-content > table > tbody > tr > td:nth-child(4) > a").GetAttribute("href");
Но мне не верится что будет работать.
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18260 / 14185 / 5366
Регистрация: 17.03.2014
Сообщений: 28,871
Записей в блоге: 1
09.06.2018, 23:20
Alexandr_7, это вернет ссылку на полный пакет. Ссылку на обновление можно получить по аналогии
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
09.06.2018, 23:20
Помогаю со студенческими работами здесь

Как программой выдернуть все ссылки с текстовика
Нужно вытащить ссылки с моего text.txt файла весом 100 мб нужна программа способная выдернуть из текстовика все содержащиеся в нем...

Не выполняет некоторые строчки кода
procedure TDM3.ADOQuery_oplata_za_proAfterScroll(DataSet: TDataSet); begin if...

Не понятны некоторые строчки в проге(
Вот есть код: #include "stdafx.h" #include <iostream> #include <conio.h> using namespace std; class A {private: //закритий...

Выдернуть часть сайта
Я хочу выдернуть из всего сайта только новости. И разместить их у себя в лаунчере. НО! Так что бы вёрстка сайта сохранилась... Так...

Выдернуть из сайта слово в текстбокс
Попробовал так на 4.netFramework'e ( c Xneto'm) всё работает как часы!) using (HttpRequest req = new HttpRequest()) { ...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru