Какое API использовать чтобы парсить данные сайта?
От: mangaman  
Дата: 07.05.15 05:54
Оценка:
Всем привет

Для себя делаю мелкий граббер инфы из игры ogame. По задумке, мне надо авторизоваться, а затем, посылая http запросы и парся ответную страничку, исполнять скрипты.
Какое API для этого использовать из C#? Какой язык\API вообще кошерно использовать для таких целей?
Re: Какое API использовать чтобы парсить данные сайта?
От: andrey82  
Дата: 07.05.15 06:23
Оценка: 1 (1) +2
Здравствуйте, mangaman, Вы писали:


M>Для себя делаю мелкий граббер инфы из игры ogame. По задумке, мне надо авторизоваться, а затем, посылая http запросы и парся ответную страничку, исполнять скрипты.

M>Какое API для этого использовать из C#? Какой язык\API вообще кошерно использовать для таких целей?

Для C# HttpWebRequest + HtmlAgilityPack
Дополнительно (must have): Fiddler
А также быть готовым в временным банам на сайте за подозрительные запросы
Re: Какое API использовать чтобы парсить данные сайта?
От: Sharov Россия  
Дата: 07.05.15 11:22
Оценка: 1 (1)
Здравствуйте, mangaman, Вы писали:

Буквально на днях видел http://habrahabr.ru/post/257049/. Может пригодится.
Кодом людям нужно помогать!
Re: Какое API использовать чтобы парсить данные сайта?
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 07.05.15 14:28
Оценка: 35 (2)
Здравствуйте, mangaman, Вы писали:

M>Всем привет


M>Для себя делаю мелкий граббер инфы из игры ogame. По задумке, мне надо авторизоваться, а затем, посылая http запросы и парся ответную страничку, исполнять скрипты.

M>Какое API для этого использовать из C#? Какой язык\API вообще кошерно использовать для таких целей?

http://ru.stackoverflow.com/questions/420354/%d0%9a%d0%b0%d0%ba-%d1%80%d0%b0%d1%81%d0%bf%d0%b0%d1%80%d1%81%d0%b8%d1%82%d1%8c-html-%d0%b2-net/420355#420355

Кстати AngleSharp поддерживает JavaScript

http://stackoverflow.com/questions/23808345/evaluate-html-javascript-from-c-sharp
http://www.codeproject.com/Articles/839588/AngleSharp-and-JavaScript#configuration

HtmlDocument

В webbrowser можешь использовать и JQuery http://www.forum.mista.ru/topic.php?id=715894#17
и солнце б утром не вставало, когда бы не было меня
Отредактировано 07.05.2015 15:39 Serginio1 . Предыдущая версия . Еще …
Отредактировано 07.05.2015 14:45 Serginio1 . Предыдущая версия .
Отредактировано 07.05.2015 14:34 Serginio1 . Предыдущая версия .
Re[2]: Какое API использовать чтобы парсить данные сайта?
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 08.05.15 09:02
Оценка:
Здравствуйте, Serginio1, Вы писали:

Кстати попробовал для интереса сайст с формированием таблицы с помощью JqGrid
Работает


private async void button6_Click(object sender, EventArgs e)
        {
            var url = "МойУрл";
            var config = new AngleSharp.Configuration()
                                          .WithCss()
                                          .WithDefaultLoader()
                                          .WithJavaScript();

            var html = DocumentBuilder.Html(new Uri(url), config);
            var form = html.Forms[0] as AngleSharp.Dom.Html.IHtmlFormElement;
            var name = form.Elements["SearchString"] as AngleSharp.Dom.Html.IHtmlInputElement;
   
        name.Value = "16 st9";
          

            var doc= await form.Submit();

        }
и солнце б утром не вставало, когда бы не было меня
Re[3]: Какое API использовать чтобы парсить данные сайта?
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 08.05.15 09:12
Оценка:
Здравствуйте, Serginio1, Вы писали:

S>Здравствуйте, Serginio1, Вы писали:


S>Кстати попробовал для интереса сайст с формированием таблицы с помощью JqGrid

S>Работает


S>
S>private async void button6_Click(object sender, EventArgs e)
S>        {
S>            var url = "МойУрл";
S>            var config = new AngleSharp.Configuration()
S>                                          .WithCss()
S>                                          .WithDefaultLoader()
S>                                          .WithJavaScript();

S>            var html = DocumentBuilder.Html(new Uri(url), config);
S>            var form = html.Forms[0] as AngleSharp.Dom.Html.IHtmlFormElement;
S>            var name = form.Elements["SearchString"] as AngleSharp.Dom.Html.IHtmlInputElement;
   
S>        name.Value = "16 st9";
          

S>            var doc= await form.Submit();

S>        }
S>


Правда DocumentBuilder.Html устаревший вместо него


static AngleSharp.Dom.IDocument Load(String url)
        {
            var config = new AngleSharp.Configuration().WithDefaultLoader();
            return AngleSharp.BrowsingContext.New(config).OpenAsync(Url.Create(url)).Result;
        }


Кстати тоже обрабатывает код JQuery

https://github.com/FlorianRappl/AngleSharp
и солнце б утром не вставало, когда бы не было меня
Отредактировано 08.05.2015 11:03 Serginio1 . Предыдущая версия .
Re[4]: Какое API использовать чтобы парсить данные сайта?
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 10.05.15 08:49
Оценка:
Здравствуйте, Serginio1, Вы писали:

S>Здравствуйте, Serginio1, Вы писали:


S>>Здравствуйте, Serginio1, Вы писали:


S>>Кстати попробовал для интереса сайст с формированием таблицы с помощью JqGrid

S>>Работает


S>>
S>>private async void button6_Click(object sender, EventArgs e)
S>>        {
S>>            var url = "МойУрл";
S>>            var config = new AngleSharp.Configuration()
S>>                                          .WithCss()
S>>                                          .WithDefaultLoader()
S>>                                          .WithJavaScript();

S>>            var html = DocumentBuilder.Html(new Uri(url), config);
S>>            var form = html.Forms[0] as AngleSharp.Dom.Html.IHtmlFormElement;
S>>            var name = form.Elements["SearchString"] as AngleSharp.Dom.Html.IHtmlInputElement;
   
S>>        name.Value = "16 st9";
          

S>>            var doc= await form.Submit();

S>>        }
S>>


S>Правда DocumentBuilder.Html устаревший вместо него



S>
S>static AngleSharp.Dom.IDocument Load(String url)
S>        {
S>            var config = new AngleSharp.Configuration().WithDefaultLoader();
S>            return AngleSharp.BrowsingContext.New(config).OpenAsync(Url.Create(url)).Result;
S>        }
S>


S>Кстати тоже обрабатывает код JQuery


S>https://github.com/FlorianRappl/AngleSharp


Прошу прощения за ложную информацию, но в обработчике нажатии кнопки присутствует и обработка без JavaScript.\
Рано обрадовался
и солнце б утром не вставало, когда бы не было меня
Re: Какое API использовать чтобы парсить данные сайта?
От: _ichensky Европа https://github.com/ichensky
Дата: 10.05.15 17:26
Оценка: -1
Здравствуйте, mangaman, Вы писали:

M>Всем привет


M>Какое API для этого использовать из C#? Какой язык\API вообще кошерно использовать для таких целей?

Юзай регекспы — самый продуктивный и малозатратный по времени и качеству способ, разные библиотеки типа htmlagilitypack не всегда могут нормально работать с не валидным html перемешаным с js, css и другим текстом.
Підтримати Україну у боротьбі з країною-терористом.

https://prytulafoundation.org/
https://u24.gov.ua/

Слава Збройним Силам України!!! Героям слава!!!
Re[2]: Какое API использовать чтобы парсить данные сайта?
От: andrey82  
Дата: 10.05.15 17:47
Оценка:
Здравствуйте, _ichensky, Вы писали:

_>Юзай регекспы — самый продуктивный и малозатратный по времени и качеству способ, разные библиотеки типа htmlagilitypack не всегда могут нормально работать с не валидным html перемешаным с js, css и другим текстом.


Серьезно ?!
RegEx match open tags except XHTML self-contained tags

Разве что уже извлеченный из тегов текст имеет смысл разбирать регекспами.
Re[3]: Какое API использовать чтобы парсить данные сайта?
От: _ichensky Европа https://github.com/ichensky
Дата: 10.05.15 19:26
Оценка: :)
Здравствуйте, andrey82, Вы писали:

A>Серьезно ?!

A>RegEx match open tags except XHTML self-contained tags

A>Разве что уже извлеченный из тегов текст имеет смысл разбирать регекспами.


В том комментарии предлагают испозовать XML парсер,
т.к. в html если можно исспользовать повторяющиеся, динамически появляющиеся теги и т.д.., но никто не запещаеть написать две функции которые перед регекспами обработают данные которые пришли с сервера.
Если не так, прошу пример в студию (который нельзя будет расспарсить регекспом и выдрать нужные данные).

Только вот, если на странице будет не валидный с точки зрения xml-ля. html.
Браузер кое как справиться и все-равно отобразит текст или запустип какую-то функцию, а вот xml парсер сломается, напр.:
<someTag style=".." <someTag2 attr=""/>abc
</someTag>

1. Что бы распарсить подобный текст.
___а. Надо будет улучшить сам xml парсер, что бы он умел обрабатывать подобный код.
или
___б. Потратить 1 минуту на написание регекспа, который выдерает текст из данных что пришли с сервера.

2. Если на сайте снова переверстают страницу.
___а. Надо будет снова парситть xml парсером и снова его доделывать.
или
___б. Потратить еще 1 минуту на написание нового регекспа.
Підтримати Україну у боротьбі з країною-терористом.

https://prytulafoundation.org/
https://u24.gov.ua/

Слава Збройним Силам України!!! Героям слава!!!
Re[5]: Какое API использовать чтобы парсить данные сайта?
От: mangaman  
Дата: 12.05.15 11:37
Оценка:
S> Прошу прощения за ложную информацию, но в обработчике нажатии кнопки присутствует и обработка без JavaScript.\
S>Рано обрадовался
Тэк, я еще не такой спец чтоб сильно тут понять, но буду разбираться
Re[6]: Какое API использовать чтобы парсить данные сайта?
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 12.05.15 13:09
Оценка: 2 (1)
Здравствуйте, mangaman, Вы писали:

S>> Прошу прощения за ложную информацию, но в обработчике нажатии кнопки присутствует и обработка без JavaScript.\

S>>Рано обрадовался
M>Тэк, я еще не такой спец чтоб сильно тут понять, но буду разбираться
Ситуация такая, что на кнопку навешен обработчик

$(document).ready(function () {
    $('#SearchTovar').submit(function () {

        // проверяем пару полей
        if ($(this).valid()) {
            var data = $('#SearchString').val();
            showDataGrid(data);
        }

        return false; // и этим false отменяем отправку формы

         });
  });


Но при submit формы этот обработчик не вызывается
и солнце б утром не вставало, когда бы не было меня
Re[6]: Какое API использовать чтобы парсить данные сайта?
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 12.05.15 14:13
Оценка: 2 (1)
Здравствуйте, mangaman, Вы писали:

S>> Прошу прощения за ложную информацию, но в обработчике нажатии кнопки присутствует и обработка без JavaScript.\

S>>Рано обрадовался
M>Тэк, я еще не такой спец чтоб сильно тут понять, но буду разбираться

Есть еще WatIn http://software-testing.ru/library/testing/general-testing/1791-watin-
и солнце б утром не вставало, когда бы не было меня
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.