Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/13: Рейтинг темы: голосов - 13, средняя оценка - 5.00
1 / 1 / 0
Регистрация: 18.04.2017
Сообщений: 26

Регистрация и парсинг данных

09.10.2019, 13:09. Показов 2745. Ответов 3

Студворк — интернет-сервис помощи студентам
Здравствуйте!
Нужно программно считывать (парсить) определенные данные водителей с личного кабинета Yandex такси для бизнеса https://fleet.taxi.yandex.ru/drivers?park,
но пока не получается даже загрузить страницу с нужными данными.

Для начала нужно программно войти в личный кабинет по адресу https://pda-passport.yandex.ru/passport?mode=auth
используя текущее подключение нужно перейти по адресу https://fleet.taxi.yandex.ru/drivers?park
и после этого уже можно парсить страницу.
Написал программу, но почему-то содержимое полученного ответа совсем не то что отображается на самой странице.
Подскажите, что нет так делаю и в правильном ли направлении.

Сам код программы

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
108
109
110
111
112
113
114
namespace Parser.Controllers
{
    public class HomeController : Controller
    {
        string login;
        string password;
        private CookieContainer cookies;
        private readonly Uri passportUri = new Uri("https://pda-passport.yandex.ru/passport?mode=auth");
        private readonly Uri taxiUri = new Uri("https://fleet.taxi.yandex.ru/drivers?park");
        public IActionResult Index(string log, string pas, string Enter)
        {
            log = "ЛОГИН";
            pas = "ПАРОЛЬ";
            if (Enter == "Enter")
            {
                if (log == null)
                {
                    throw new ArgumentNullException("login");
                }
 
                if (log.Length == 0)
                {
                    throw new ArgumentException("login could not be empty", "login");
                }
 
                if (pas == null)
                {
                    throw new ArgumentNullException("password");
                }
 
                if (pas.Length == 0)
                {
                    throw new ArgumentException("password could not be empty", "password");
                }
                this.login = log;
                this.password = pas;              
                HttpWebRequest request = GetRequest(passportUri,
                                          new KeyValuePair<string, string>("login", this.login),
                                          new KeyValuePair<string, string>("passwd", this.password),
                                          new KeyValuePair<string, string>("twoweeks", "yes"),
                                          new KeyValuePair<string, string>("retpath", ""));
                try
                {
                    using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
                    {
                        if (response.ResponseUri == passportUri)
                        {
                            throw new YandexException("Неправильная пара логин-пароль! Авторизоваться не удалось.");
                        }
                        ViewBag.Status = response.ContentType;
                    }
                }
                catch (WebException exc)
                {
                    throw new YandexException("Чертовщина", exc);                    
                }               
                 request = GetRequest2(taxiUri, WebRequestMethods.Http.Get);              
                 using (HttpWebResponse response2 = (HttpWebResponse)request.GetResponse())
                 {
                     var stream = response2.GetResponseStream();
                     using (StreamReader reader = new StreamReader(stream))
                     {
                         ViewBag.Result= reader.ReadToEnd();
                     }
                 }
            }            
 
            return View();
 
        }
 
        public virtual HttpWebRequest GetRequest2(Uri url, string method)
        {
            HttpWebRequest request =
#if MONO
                (HttpWebRequest)HttpWebRequest.Create(url);
#else
                HttpWebRequest.CreateHttp(url);
#endif
            request.Method = method;
            if (cookies == null)
            {
                cookies = new CookieContainer();
            }
            request.CookieContainer = cookies;
            request.KeepAlive = true;
            request.Headers[HttpRequestHeader.AcceptCharset] = Encoding.UTF8.WebName;
            request.Headers[HttpRequestHeader.AcceptEncoding] = "gzip";
            request.AutomaticDecompression = DecompressionMethods.GZip;
            return request;
        }
        public virtual HttpWebRequest GetRequest(Uri url, params KeyValuePair<string, string>[] headers)
        {
            HttpWebRequest request = GetRequest2(url, WebRequestMethods.Http.Post);
            StringBuilder data = new StringBuilder(1024);
            for (int i = 0; i < headers.Length - 1; i++)
            {
                data.AppendFormat("{0}={1}&",
                                  HttpUtility.HtmlEncode(headers[i].Key),
                                  HttpUtility.HtmlEncode(headers[i].Value));
            }
            if (headers.Length > 0)
            {
                data.AppendFormat("{0}={1}",
                                   HttpUtility.HtmlEncode(headers[headers.Length - 1].Key),
                                   HttpUtility.HtmlEncode(headers[headers.Length - 1].Value));
            }
 
            byte[] rawData = Encoding.UTF8.GetBytes(data.ToString());
            request.ContentLength = rawData.Length;
            request.GetRequestStream().Write(rawData, 0, rawData.Length);
            return request;
        }
    }
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
09.10.2019, 13:09
Ответы с готовыми решениями:

Регистрация и базы данных
ЗДравствуйте! На практике дали задание сделать следующее: пользователь заходит на интернет страницу-&gt;регистрируется-&gt; тетеньке на...

Регистрация и хранение данных
Делаю сайт для проведения турниров по одной игре.(Dota 2) Примерное число команд до 1000, и до 6000-7000 пользователей на сайте всего. ...

Регистрация источника данных
Есть код HINSTANCE ODBC = LoadLibrary(&quot;odbccp32.dll&quot;); if(!ODBC) { ShowMessage(&quot;Error ODBC&quot;); } typedef BOOL...

3
1 / 1 / 0
Регистрация: 18.04.2017
Сообщений: 26
10.10.2019, 10:55  [ТС]
Заметил что при переходе в браузере по ссылке https://fleet.taxi.yandex.ru/drivers?park
эта ссылка трансформируется в это

https://fleet.taxi.yandex.ru/d... age_size=2


Понимаю что есть специальные api ключи для работы с сайтом, но ключей нужных мне нет.
Мне нужно получить страницу для обычного парсинга.
То есть, похоже (возвращаясь к моему пред идущему посту) что
C#
1
GetRequest2(taxiUri, WebRequestMethods.Http.Get)
ссылки https://fleet.taxi.yandex.ru/drivers? возвращает именно результат этой ссылки а не трансформированной.
если это так, то как получать трансформированную ссылку и использовать ее.
Подставлял скопированную в браузере модифицированную ссылку ответ такой же как и от обычной
0
 Аватар для diadiavova
7261 / 2608 / 745
Регистрация: 11.04.2015
Сообщений: 4,155
Записей в блоге: 43
10.10.2019, 13:13
Albeit, содержимое может подгружаться скриптом и им же вставляться в страницу. Тут нужно либо веб-движок использовать (самый простой способ), либо изучать что откуда грузится и отправлять запросы именно туда. Для второго случая могут помочь инструменты браузера, которые сейчас во всех браузерах есть(нужно нажать F12 чтобы они открылись), а также всякие программы типа фиддлера. Просматривать, что запрашивается при помощи аякс-запросов, иногда данные приходят прямо в коде скрипта и так далее, это надо все изучать.
1
1 / 1 / 0
Регистрация: 18.04.2017
Сообщений: 26
10.10.2019, 13:23  [ТС]
Да, действительно, похоже что содержимое в <body> подгружаться скриптом js.
Буду разбираться дальше.
Спасибо за подсказку!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
10.10.2019, 13:23
Помогаю со студенческими работами здесь

Регистрация источника данных
Народ а никто не знает где мона почитать про регистрацию источника данных в Винде программно ну что бы не лезть в Панель управления

Чтение текстового файла. Парсинг его данных. Создание исключений для данных. Запись свойств объектов в файл
Проблема такая. Есть файл data.txt. В нем например какие-то данные. Landon Donovan, 150, A Hulk Hogan , 100, M Duke Nukem, 50,...

Регистрация Базы данных на сервере.
Народ, спасите. получаю доступ к БД... кароче это скажет больше: &lt;connectionStrings&gt; &lt;add ...

Регистрация с занесением данных в блокнот
Добрый день. Помогите написать простую регистрацию, что бы данные в блокноте хранились. Форма: &lt;html&gt; &lt;head&gt; ...

Регистрация событий базы данных
Есть база данных MYDB в ней есть таблица Player в таблице 2 поля: ID и Money. Собственно вопрос как регистрировать события в базе данных,...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru