powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / парсер интернет ресурса на c#
20 сообщений из 20, страница 1 из 1
парсер интернет ресурса на c#
    #39787827
bulaolen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Цель: "распарсить" сайт. А именно, нужно написать прогу, которая по запуску будет скачивать все файлы из определенного раздела по определенной дате.
Основная сложность - что бы получить доступ к этим файлам, нужно пройти авторизацию (программно, судя по всему).
Вопросы: как реализовать переходы по вкладкам в списке файлов (когда на странице отображается 10 из 7256892 файлов)? как настроить фильтрацию на сайте (это функционал сайта)? как пройти эту авторизацию (там множество переадресаций)? как правильно отправлять post/get запросы?

пытался сам код писать, успехи есть, как и чувство что я что-то не догоняю:)

Код: 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.
            string site = URL;
            HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(site);
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
            string content = "";
            using (StreamReader stream = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
            { content = stream.ReadToEnd(); }
            doc.LoadHtml(content);
            string[] nodeSelected = { "//a[@class=\"toolbarLink\"]" };
            string href = "";
            String[] words = new string[3];
            foreach (string selectNode in nodeSelected)
            {
                foreach (HtmlAgilityPack.HtmlNode node in doc.DocumentNode.SelectNodes(selectNode))
                {
                    href = node.OuterHtml;
                    words = href.Split(new char[] { '\'' }, StringSplitOptions.RemoveEmptyEntries);
                }
            }
            site = URL + href;
            request = (HttpWebRequest)HttpWebRequest.Create(site);
            string sCookies = request.Headers["Set-Cookie"];
            request.Method = "POST";
            string sName = "userid=User&password=Pass";
            byte[] byteArray = System.Text.Encoding.UTF8.GetBytes(sName);
            request.ContentType = "application/x-www-form-urlencoded";
            request.ContentLength = byteArray.Length;
            request.AllowAutoRedirect = false;
            using (Stream dataStream = request.GetRequestStream())
            { dataStream.Write(byteArray, 0, byteArray.Length); }
            // получаем куки при авторизации
            sCookies = "";
            if (!String.IsNullOrEmpty(request.Headers["Set-Cookie"]))
                sCookies = request.Headers["Set-Cookie"];

            if (!String.IsNullOrEmpty(sCookies))
                request.Headers.Add(HttpRequestHeader.Cookie, sCookies);
            response = (HttpWebResponse)request.GetResponse();
            doc = new HtmlAgilityPack.HtmlDocument();
            content = "";
            using (StreamReader stream = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
            { content = stream.ReadToEnd(); }
            doc.LoadHtml(content);

            response.Close();
            return href;
...
Рейтинг: 0 / 0
парсер интернет ресурса на c#
    #39787832
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всё зависит от сайта, а его адрес как раз и не приведен.

Если сайт SPA или что-то подобное, то, вполне возможно, гораздо проще не парсить html, а работать непосредственно с json, которым он обменивается с сервером
...
Рейтинг: 0 / 0
парсер интернет ресурса на c#
    #39787843
bulaolen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
парсер интернет ресурса на c#
    #39787932
bulaolen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

ох, забыл совсем, что это внутренний портал, видимо, не для всего интернета доступный :)
...
Рейтинг: 0 / 0
парсер интернет ресурса на c#
    #39787951
listtoview
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bulaolen,

хидеры нужно точь в точь передавать
плюс в первом ответе наверняка есть токен сессии
его нельзя игнорить
...
Рейтинг: 0 / 0
парсер интернет ресурса на c#
    #39788026
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bulaolenShocker.Pro,

ох, забыл совсем, что это внутренний портал, видимо, не для всего интернета доступный :)Тогда F12 в браузере в руки и смотри сетевой обмен
...
Рейтинг: 0 / 0
парсер интернет ресурса на c#
    #39788169
bulaolen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

смотрю:) при входе на страницу авторизации отправляется один get запрос, при входе один post запрос отправляется с двумя значениями и два get запроса. Кроме url и значений в post не знаю что смотреть и как использовать
...
Рейтинг: 0 / 0
парсер интернет ресурса на c#
    #39788174
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нормальный API что ли недоступен?
...
Рейтинг: 0 / 0
парсер интернет ресурса на c#
    #39788210
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bulaolenКроме url и значений в post не знаю что смотреть и как использоватьТело ответа смотри. Посмотри, что возвращается - html или json. Еще посмотри, какой будет обмен, когда листаешь страницы с файлами.
...
Рейтинг: 0 / 0
парсер интернет ресурса на c#
    #39788251
bulaolen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Процесс примерно следующий:
Захожу на стартовую страницу, где достаю ссылку на страницу авторизации

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
        public static string go_to_login_page()
        {
            string site = URL;
            HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(site);
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();

            using (StreamReader stream = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
                string content = stream.ReadToEnd();

            HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
            doc.LoadHtml(content);

            string nodeSelected = "//a[@class=\"toolbarLink\"]" ;
            String[] words = new string[3];

            foreach (HtmlAgilityPack.HtmlNode node in doc.DocumentNode.SelectNodes(nodeSelected))
                    {
                        string href = node.OuterHtml;
                        words = href.Split(new char[] { '\'' }, StringSplitOptions.RemoveEmptyEntries);
                    }                    
            response.Close();
            return words[1];
        }    



Затем перехожу по этой ссылке, там форма (которую надо заполнить).
Вот тут уже начинаются проблемки. Почему-то не уходят параметры для post запроса, непонятно что с куками происходит. Есть ощущение что происходит редирект, либо какая-то очень замысловатая дичь:)

Код: 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.
        public static string fuck(string html)
        {
            string site = URL + html;
            string sName = "userid=логин&password=пароль";

            HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(site);
            string sCookies = request.Headers["Set-Cookie"];
            request.Method = "POST";
            byte[] byteArray = System.Text.Encoding.UTF8.GetBytes(sName);
            request.ContentType = "application/x-www-form-urlencoded";
            request.ContentLength = byteArray.Length;
            request.AllowAutoRedirect = false;

            using (Stream dataStream = request.GetRequestStream())
                dataStream.Write(byteArray, 0, byteArray.Length);
            /* вот тут проблемки
                        using (var webClient = new WebClient())
                        {
                            var log = new NameValueCollection();
                            log.Add("password", "Qwerty1");
                            log.Add("userid", "GurevS");
                            response = webClient.UploadValues(site, log);
                            string str = System.Text.Encoding.UTF8.GetString(response);
                            Console.WriteLine(str);
                            Console.ReadKey();
                        }
                        //вот это непонятно работает или нет
                        // получаем куки при авторизации
                        sCookies = "";
                        if (!String.IsNullOrEmpty(request.Headers["Set-Cookie"]))
                            sCookies = request.Headers["Set-Cookie"];

                        if (!String.IsNullOrEmpty(sCookies))
                            request.Headers.Add(HttpRequestHeader.Cookie, sCookies);
                        response = (HttpWebResponse)request.GetResponse();
                        doc = new HtmlAgilityPack.HtmlDocument();
                        content = "";
                        using (StreamReader stream = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
                        { content = stream.ReadToEnd(); }
                        doc.LoadHtml(content);

            response.Close();
                        */
            return "";
        }
...
Рейтинг: 0 / 0
парсер интернет ресурса на c#
    #39788265
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bulaolen,
Делай код наоборот.
1. Скрин post/get сюда которай на F12.
2. На этот post/get пишем метод
MyPostNumber1(входные)
чтобы твой метод Один в один повторил то что на скрине.
Всё.
...
Рейтинг: 0 / 0
парсер интернет ресурса на c#
    #39788274
bulaolen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

и уходит и возвращается html
меняются соответствующие параметры запросов
заметил что кукисы появляются при прохождении авторизации
...
Рейтинг: 0 / 0
парсер интернет ресурса на c#
    #39788287
bulaolen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,

вот что происходит при входе на страницу авторизации
...
Рейтинг: 0 / 0
парсер интернет ресурса на c#
    #39788288
bulaolen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,

при авторизации (и последующем редиректе на главную страницу)
...
Рейтинг: 0 / 0
парсер интернет ресурса на c#
    #39788290
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bulaolenавторизацииты же прошел данный уровень игры?
...
Рейтинг: 0 / 0
парсер интернет ресурса на c#
    #39788312
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bulaolen, ок, то есть тонкий клиент.

Тогда вопрос - зачем тебе тут HttpWebRequest?
Возьми HttpClient, авторизуешься с его помощью, с куками возиться не понадобится, потому что пока у тебя есть экземпляр HttpClient-а, он авторизован. Дальше запрашиваешь нужные html-ки с нужными параметрами. Переадресацию он тоже сам отслеживает, если принудительно не запретить.
...
Рейтинг: 0 / 0
парсер интернет ресурса на c#
    #39788404
bulaolen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,

этот уровень я прошел, конечно-же.
...
Рейтинг: 0 / 0
парсер интернет ресурса на c#
    #39788407
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bulaolenPetro123,

этот уровень я прошел, конечно-же.ОК
Забудь про него..
...
Рейтинг: 0 / 0
парсер интернет ресурса на c#
    #39793445
bulaolen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,

смотря в каком плане прошел:)
если программно - то нет...
...
Рейтинг: 0 / 0
парсер интернет ресурса на c#
    #39793520
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bulaolen,
Парси сайты без авторизации и не мучай мозги.
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / парсер интернет ресурса на c#
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]