Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
7 / 5 / 2
Регистрация: 06.10.2018
Сообщений: 183

Парсер постов сайта

01.07.2023, 16:14. Показов 793. Ответов 8

Студворк — интернет-сервис помощи студентам
Всем привет нужно выбрать с сайта все посты в названии которых есть определенное слово
название поста, название поста заключено в <p class="h4"> тут название поста </p>
на данный момент я парсю по <a> и классу
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public string[] Parse(IHtmlDocument document)
        {
            var list = new List<string>();
 
            var items = document.QuerySelectorAll("a").Where(item => item.ClassName != null && item.ClassName.Contains("tm-title__link"));
            
 
            foreach (var item in items)
            {
                list.Add(item.TextContent);
            }
 
            return list.ToArray();
        }
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
01.07.2023, 16:14
Ответы с готовыми решениями:

Парсер сайта на C#
Приветствую, есть задача написать парсер, как получить код станицы и в дальнейшем получить заведомые данные я знаю, проблема в том что на...

Парсер данных сайта
Привет всем!!! Нужно написать парсер работоспособности Способов вывода из сайта платежей. Чтобы программа обновляла данные каждые...

Парсер статистики с сайта
Привет, я создаю парсер на c#, опыта у меня не много поэтому буду благодарен за любые советы. Я нашел сайт со статистикой оттуда я...

8
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18298 / 14222 / 5368
Регистрация: 17.03.2014
Сообщений: 28,898
Записей в блоге: 1
01.07.2023, 16:49
nsprovasiliy,
C#
1
var posts = document.QuerySelectorAll("p.h4").Where(el => el.TextContent.Contains("искомый текст", StringComparison.CurrentCultureIgnoreCase));
1
7 / 5 / 2
Регистрация: 06.10.2018
Сообщений: 183
04.07.2023, 11:26  [ТС]
что то не получается спарсить вот с этого сайта https://flot.com новости делаю вот так
C#
1
 var items = document.QuerySelectorAll("p").Where(item => item.TextContent != null  && item.TextContent.Contains("ВМФ"));
но что то не получается кто может подсказать
прошу прощение за скрин

Добавлено через 10 минут
C#
1
2
3
4
5
6
var items = document.QuerySelectorAll("p").Where(item => item.TextContent != null  && item.TextContent.Contains("ВМФ"));            
 
            foreach (var item in items)
            {
                list.Add(item.TextContent);
            }
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18298 / 14222 / 5368
Регистрация: 17.03.2014
Сообщений: 28,898
Записей в блоге: 1
04.07.2023, 12:18
nsprovasiliy, в приведенном коде нет ошибок. У меня он находит 4 новости. Ошибка где-то в другом месте.
Миниатюры
Парсер постов сайта  
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18298 / 14222 / 5368
Регистрация: 17.03.2014
Сообщений: 28,898
Записей в блоге: 1
04.07.2023, 12:19
Возможно проблема в кодировке. Как вы качаете текст с сайта?
0
7 / 5 / 2
Регистрация: 06.10.2018
Сообщений: 183
04.07.2023, 12:35  [ТС]
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
using System.Net;
using System.Net.Http;
using System.Threading.Tasks;
 
namespace Parser.Core
{
    class HtmlLoader
    {
        readonly HttpClient client;
        readonly string url;
 
        public HtmlLoader(IParserSettings settings)
        {
            client = new HttpClient();
            url = $"{settings.BaseUrl}/{settings.Prefix}/";
        }
 
        public async Task<string> GetSourceByPageId(int id)
        {
            var currentUrl = url.Replace("{CurrentId}", id.ToString());
            var response = await client.GetAsync(currentUrl);
            string source = null;
 
            if (response != null && response.StatusCode == HttpStatusCode.OK)
            {
                source = await response.Content.ReadAsStringAsync();
            }
 
            return source;
        }
    }
}
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
using System.Collections.Generic;
using System;
 
 
namespace Parser.Core.Habra
{
    class HabraSettings : IParserSettings
    {       
        public HabraSettings(int start, int end)
        {
            StartPoint = start;
            EndPoint = end;
        }       
     
        //public string BaseUrl { get; set; } = "http://militaryrussia.ru";
        public string BaseUrl { get; set; } = "https://flot.com";
 
        public string Prefix { get; set; } = "page{CurrentId}";
 
        public int StartPoint { get; set; }
 
        public int EndPoint { get; set; }
    }
}
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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
using AngleSharp.Html.Parser;
using AngleSharp.Text;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace Parser.Core
{
    class ParserWorker<T> where T : class
    {
        IParser<T> parser;
        IParserSettings parserSettings;
 
        HtmlLoader loader;
 
        bool isActive;
 
        #region Properties
 
        public IParser<T> Parser
        {
            get
            {
                return parser;
            }
            set
            {
                parser = value;
            }
        }
 
        public IParserSettings Settings
        {
            get
            {
                return parserSettings;
            }
            set
            {
                parserSettings = value;
                loader = new HtmlLoader(value);
            }
        }
 
        public bool IsActive
        {
            get
            {
                return isActive;
            }
        }
 
        #endregion
 
        public event Action<object, T> OnNewData;
        public event Action<object> OnCompleted;
 
        public ParserWorker(IParser<T> parser)
        {
            this.parser = parser;
        }
 
        public ParserWorker(IParser<T> parser, IParserSettings parserSettings) : this(parser)
        {
            this.parserSettings = parserSettings;
        }
 
        public void Start()
        {
            isActive = true;
            Worker();
        }
 
        public void Abort()
        {
            isActive = false;
        }
 
        private async void Worker()
        {
            for (int i = parserSettings.StartPoint; i <= parserSettings.EndPoint; i++)
            {
                if (!isActive)
                {
                    OnCompleted?.Invoke(this);
                    return;
                }
 
                var source = await loader.GetSourceByPageId(i);
                var domParser = new HtmlParser();
 
                var document = await domParser.ParseDocumentAsync(source);
 
                var result = parser.Parse(document);
 
                OnNewData?.Invoke(this, result);
            }
 
            OnCompleted?.Invoke(this);
            isActive = false;
        }
 
 
    }
}
0
7 / 5 / 2
Регистрация: 06.10.2018
Сообщений: 183
04.07.2023, 12:42  [ТС]
Вот проект
Вложения
Тип файла: rar Parser V1.rar (10.20 Мб, 2 просмотров)
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18298 / 14222 / 5368
Регистрация: 17.03.2014
Сообщений: 28,898
Записей в блоге: 1
04.07.2023, 13:27
nsprovasiliy, проблема кроется в строке №15. Попробуйте понять почему.
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
using System.Net;
using System.Net.Http;
using System.Threading.Tasks;
 
namespace Parser.Core
{
    class HtmlLoader
    {
        readonly HttpClient client;
        readonly string url;
 
        public HtmlLoader(IParserSettings settings)
        {
            client = new HttpClient();
            url = $"{settings.BaseUrl}/{settings.Prefix}/";
        }
 
        public async Task<string> GetSourceByPageId(int id)
        {
            var currentUrl = url.Replace("{CurrentId}", id.ToString());
            var response = await client.GetAsync(currentUrl);
            string source = null;
 
            if (response != null && response.StatusCode == HttpStatusCode.OK)
            {
                source = await response.Content.ReadAsStringAsync();
            }
 
            return source;
        }
    }
}
0
7 / 5 / 2
Регистрация: 06.10.2018
Сообщений: 183
04.07.2023, 14:56  [ТС]
я понял что settings.Prefix мешается, но я в него передаю количество страниц для парсинга
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
04.07.2023, 14:56
Помогаю со студенческими работами здесь

Парсер информации с сайта
Здравствуйте, помогите пожалуйста сделать парсер имён и номеров с сайта &quot;torontovka точка ком&quot; Там есть: &lt;span...

Парсер многостраничного сайта
Здравствуйте, уважаемые программисты. Обращаюсь к вам с такой проблемой. Написал парсер для сайта одной игры. Парсер работает отлично,...

Парсер валют с сайта
Помогите написать парсер валют с главной страницы этого сайта myfin.by.

Парсер изображений с сайта
Здравствуйте! Как реализовать? Нужен пример кода. Кидаем ссылку на конкретный товар (например из Allegro.pl) в textbox она подтягивает...

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


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
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-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru