Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
1 / 2 / 0
Регистрация: 30.04.2019
Сообщений: 260
1

Парсер с использованием "HtmlAgilityPack"

26.01.2020, 17:12. Показов 2154. Ответов 32

Author24 — интернет-сервис помощи студентам
Хочу сделать парсер, который парсил бы статус стрима (в сети/ не в сети) на "twitch.tv" Пришел к коду ниже и остановился на css селекторах, помогите



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
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Leaf.xNet;
using Fizzler;
using Fizzler.Systems.HtmlAgilityPack;
using HtmlAgilityPack;
 
 
namespace ParserTritch
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        void test( string ssilka)
        {
            string name = "";
 
            var danni = new HttpRequest();
            string response = danni.Get(ssilka).ToString();
 
 
 
            HtmlAgilityPack.HtmlDocument hap = new HtmlAgilityPack.HtmlDocument();
            hap.LoadHtml(response);
 
            
 
            foreach(var item in hap.DocumentNode.QuerySelectorAll(""))
            {
                name = item.QuerySelector("").InnerText;
            }
            richTextBox1.Text = name;
          
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            test(textBox1.Text);
        }
 
        private void textBox1_TextChanged(object sender, EventArgs e)
        {
 
        }
    }
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.01.2020, 17:12
Ответы с готовыми решениями:

Парсер love.mail.ru (htmlagilitypack)
Всем добрый день. Есть проект парсинга love.mail.ru...

HtmlAgilityPack ошибка В рамках задачи не удалось найти "Resgen.exe" с использованием SdkToolsPath
Здраствуйте. Выскакивает вот такая ошибка. В первые подключал либу HtmlAgilityPack ...

Парсер информации с сайта HtmlAgilityPack
Хочу создать мини базы знаний для игры. Для этого пытаюсь спарсить данные с сайта и запихнуть их в...

Парсер на HtmlAgilityPack содержит ошибки
Есть специалисты, котроые могут посмотреть в чем ошибка? using System; using...

32
1 / 2 / 0
Регистрация: 30.04.2019
Сообщений: 260
29.01.2020, 15:37  [ТС] 21
Author24 — интернет-сервис помощи студентам
Ваш совет определенно помог, за что я хочу выразить отдельную благодарность. Сам месседж бокс выдал немного не тот ответ, который я ожидал.
Миниатюры
Парсер с использованием "HtmlAgilityPack"  
0
6219 / 2467 / 725
Регистрация: 11.04.2015
Сообщений: 3,986
Записей в блоге: 43
29.01.2020, 15:45 22
Illson, ну жс-код должен возвратить массив строк, так чтт вполне логично, что в коде сишарпа он превращается в какую-то коллекцию
1
1 / 2 / 0
Регистрация: 30.04.2019
Сообщений: 260
29.01.2020, 15:53  [ТС] 23
и как мне этот массив разобрать, я не очень силен в шарпе, что бы самому сообразить.
0
6219 / 2467 / 725
Регистрация: 11.04.2015
Сообщений: 3,986
Записей в блоге: 43
29.01.2020, 16:10 24
Illson, да здесь собственно вопрос в том, что ты хочешь получить и зачем тебе это надо. Я вводил это в консоль браузера и все элементы массива содержали один и тот же текст - "В эфире".
Можно объединить все это либо в коде жс, либо на шарпе. В первом случае это будет выглядеть так
Javascript
1
[...document.querySelectorAll(".tw - channel - status - text - indicator > p")].map(e=>e.textContent).join("\r\n");
Получишь строку, в которой каждый элемент массива будет на новой строчке
Во втором можно либо тоже джоином объединить,
C#
1
var responseString = string.Join("\r\n", response);
либо в цикле обойти
C#
1
2
3
4
5
6
7
var responseString = "";
foreach(string item in response)
{
// Сцеплять, конечно лучше StringBuilder'ом, но в данном случае дело не в этом, просто для наглядности
    responseString += item + "\r\n"; 
 
}
0
1 / 2 / 0
Регистрация: 30.04.2019
Сообщений: 260
29.01.2020, 19:47  [ТС] 25
В первом случае получается текст "CefSharp.JavascriptResponse"
Во втором примере студия выдает текст
Миниатюры
Парсер с использованием "HtmlAgilityPack"  
0
6219 / 2467 / 725
Регистрация: 11.04.2015
Сообщений: 3,986
Записей в блоге: 43
29.01.2020, 21:01 26
Illson, ну по идее да, там должен возвращаться такой объект, я просто посмотрел на картинку в твоем посте, и из надписи в месседжбоксе решил, что там просто список. Так у меня нет ведь проекта с цефшарпом, я всплепую советы раздаю ))) У объекта JavаscriptResult имеется несколько свойств, задокументировано там плохо, поэтому ковыряться надо. Посмотри что возвращает свойство Result, скорей всего оно и будет содержать нужный объект. Неохота мне просто сейчас проект создавать, цефшарп ставить, что-то там придумывать, чтобы можно было дать точные инструкции, что делать. Поковыряйся немного сам, ты уже близко к цели. Вполне возможно, что response.Result как раз и возвратит нужную коллекцию, тогда в примерах выше просто замени response на response.Result

Добавлено через 58 минут
Чтобы уже закончить с этим ))
C#
1
2
3
            var result = await chromiumWebBrowser1.EvaluateScriptAsync("[...document.querySelectorAll(\".tw-channel-status-text-indicator > p\")].map(e=>e.textContent);");
            var stringArray = (result.Result as List<object>).Select(o => o.ToString()).ToArray();
            MessageBox.Show(string.Join("\r\n", stringArray));
0
1 / 2 / 0
Регистрация: 30.04.2019
Сообщений: 260
29.01.2020, 21:26  [ТС] 27
сложно оказалось, я попытался что то сделать. Решил пойти другим путем, тем что попроще. На сайте есть окно, которое мешает всем чему можно, я собираюсь консольной командой закрыть это окно. Суть проблемы в том, что на сайте 2 кнопки с идентичными классами, мне нужно каким то образом нажать на 2-ю кнопку, что бы все работало, в моей голове это выглядит - поместить все в лист и нажать на 2-й элемент, я без понятия как это реализовать
C#
1
 chromeBrowser.ExecuteScriptAsync("document.querySelector('.tw-flex-grow-0').click()");
0
6219 / 2467 / 725
Регистрация: 11.04.2015
Сообщений: 3,986
Записей в блоге: 43
29.01.2020, 21:53 28
Цитата Сообщение от Illson Посмотреть сообщение
сложно оказалось, я попытался что то сделать. Решил пойти другим путем, тем что попроще.
Я же привел код. Ты дополнение к предыдущему посту видел?
Цитата Сообщение от Illson Посмотреть сообщение
я без понятия как это реализовать
Попробуй так
Javascript
1
document.querySelectorAll('.tw-flex-grow-0')[1].click()
0
1 / 2 / 0
Регистрация: 30.04.2019
Сообщений: 260
30.01.2020, 05:16  [ТС] 29
этот вариант не работает
0
6219 / 2467 / 725
Регистрация: 11.04.2015
Сообщений: 3,986
Записей в блоге: 43
30.01.2020, 06:18 30
Цитата Сообщение от Illson Посмотреть сообщение
этот вариант не работает
Ну я по описанию сделал, а на сайте все выглядит немного не так как ты описал
Javascript
1
document.querySelectorAll('.tw-flex-grow-0')[1].querySelector("[data-test-selector=test_selector_prime_tracking_button_wrapper]").click()
Это я вводил в консоль, все сработало.
0
1 / 2 / 0
Регистрация: 30.04.2019
Сообщений: 260
02.02.2020, 06:13  [ТС] 31
Дело в том, что в момент загрузки сайта он считает обязательным показать документацию как новичку, эта документация перекрывает нужную мне информацию. А конкретно ваш код в консоли выдает ошибку и не нажимает на кнопочку
Миниатюры
Парсер с использованием "HtmlAgilityPack"  
0
управление сложностью
1687 / 1300 / 259
Регистрация: 22.03.2015
Сообщений: 7,545
Записей в блоге: 5
03.02.2020, 08:47 32
Не все так просто, как кажется на первый взгляд. Вам нужно ознакомиться с программированием в web, понимать как все работает.
Вам нужно сформировать цепочку корректных запросов, чтобы получить желаемый результат. Просто-так, я думаю вряд ли кто-то будет этим заниматься.
0
1 / 2 / 0
Регистрация: 30.04.2019
Сообщений: 260
06.02.2020, 14:26  [ТС] 33
Я посидел и нашел выход из этой ситуации, даже попробовал сам реализовать. Суть в том, что бы удалить этот блок, как элемент страницы, у меня не получилось сделать так, что бы это работало, сложно
C#
1
chromeBrowser.ExecuteScriptAsync("document.querySelector('.tw-flex-shrink-0').remove()");
0
06.02.2020, 14:26
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.02.2020, 14:26
Помогаю со студенческими работами здесь

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

Парсер IpB с помощью HtmlAgilityPack
Всем добрый вечер. Обращаюсь со следующем вопросом. Есть например html форма регистрации IPB. Мне...

Парсинг с использованием HtmlAgilityPack
Здравствует, во время выполнения приложения получаю исключение на 7-й строке...

Парсер с использованием CURL
Здравствуйте, столкнулся с вопросом. Пытаюсь парсить сайт с помощью CURL. Вот так описываю...

Парсер на Laravel с использованием библиотеки
Доброго времени суток! Я к Вам с таким вопросом. Задали написать парсер сайта вакансий в ларавел....

Парсер лога с использованием boost::regex
Всем привет. Есть задача пропарсить лог антивирусника с ипользованием boot:: regex, и выдать...

HtmlAgilityPack
Есть html код,использующий класс abcsd_aktive (к примеру), соответственно есть класс...


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

Или воспользуйтесь поиском по форуму:
33
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru