Змінюй хід війни! Допомагай ЗСУ!

Парсинг сайта (C#)

  • Автор теми Автор теми _Vovik_
  • Дата створення Дата створення
Статус: Офлайн
Реєстрація: 14.12.2006
Повідом.: 288
Парсинг сайта (C#)

Есть вот такой сайт
⚠ Тільки зареєстровані користувачі бачать весь контент та не бачать рекламу.
.
Захотел ускорить процесс выбора нужных объявлений и столкнулся с некоторыми сложностями.

Придумал пару вариантов, но оба проблемных..

Первый:
Код:
public void GetWebPageAsString()
{
    
    WebRequest requestHtml = WebRequest.Create("https://tender.me.gov.ua/EDZFrontOffice/menu/uk/purchaseStartSearch:announce_detail?id=276600");
  
    WebResponse responseHtml = requestHtml.GetResponse();
    
    StreamReader r = new StreamReader(responseHtml.GetResponseStream());
   
    string htmlContent = r.ReadToEnd();
    
    HtmlDocument doc = new HtmlDocument();
                doc.LoadHtml(htmlContent);
                doc.Save(@"c:\15.txt");
    r.Close();
    
}

Решил по идентификатору искать нужные.

Возвращается такой вот Html: Переглянути вкладення 15.txt

Нужная информация для регулярного выражения, находящаяся в ячейках таблицы, заполняется каким то кодом на Java
(javax.faces.ViewState j_id1:j_id10
nestedView:filter_form nestedView:filter_form) и прочитать я их не могу.

Второй вариант. Решил выбрать все объявления.
Код:
        public void GetWebPages()
        {
            WebResponse result = null;
            HttpWebRequest req = null;
            Stream newStream = null;
            Stream ReceiveStream = null;
            StreamReader sr = null;

            try
            {
                req = (HttpWebRequest)HttpWebRequest.Create("https://tender.me.gov.ua/EDZFrontOffice/menu/uk/purchaseStartSearch");
                req.Method = "POST";
                req.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 6.1; ru; rv:1.9.2.13) Gecko/20101203 AskTbFXTV5/3.9.1.14019 Firefox/3.6.13";
                req.ContentType = "application/x-www-form-urlencoded ";
                
                req.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
                req.Headers.Add("Accept-Language", "ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3");
                req.Headers.Add("Accept-Encoding", "gzip");
                req.Headers.Add("Accept-Encoding", "deflate");
                req.Headers.Add("Accept-Charset", "windows-1251,utf-8;q=0.7,*;q=0.7");
                req.Connection = "keep-alive";
                req.Headers.Add(HttpRequestHeader.Cookie, "JSESSIONID=68990d1f5fc1ff5e9d6f12676844");
                byte[] SomeBytes = null;
                string qstring = "nestedView%3Afilter_form=nestedView%3Afilter_form&nestedView%3Afilter_form%3Abull=1417&nestedView%3Afilter_form%3Afilterbranch=&nestedView%3Afilter_form%3Afiltercode=&nestedView%3Afilter_form%3Aj_id_id34pc8=&nestedView%3Afilter_form%3Aj_id_id41pc8=%D0%A8%D1%83%D0%BA%D0%B0%D1%82%D0%B8&javax.faces.ViewState=j_id1%3Aj_id8";
                SomeBytes = Encoding.GetEncoding(1251).GetBytes(qstring);
                req.ContentLength = SomeBytes.Length;
                newStream = req.GetRequestStream();
                newStream.Write(SomeBytes, 0, SomeBytes.Length);
                newStream.Close();

                result = req.GetResponse();
                ReceiveStream = result.GetResponseStream();
                Encoding encode = Encoding.GetEncoding(1251);
                sr = new StreamReader(ReceiveStream);
                string htmlContent = sr.ReadToEnd();
                
                HtmlDocument doc = new HtmlDocument();
                doc.LoadHtml(htmlContent);
                doc.Save(@"c:\14.txt");
                ReceiveStream.Close();
                sr.Close();
            }
            catch (Exception )
            {
                
                
            }}
Но этот вариант не работает.. Где то ошибка наверное.

Два вопроса... Можно ли вернуть заполненные ячейки текстом с объявлением?
И что не правильно во втором варианте?
 
а че ты мучаешься открой страницу WebBrowser'ом и бегай себе спокойно по коллекции элементов :)
 
- не нашел аутентификации в твоем коде
- аот это: "JSESSIONID=68990d1f5fc1ff5e9d6f12676844" выдается сервером на первый запрос

собственно, Fiddler в помощь - пройди весь процесс в браузере и изучи, что вернет фидлер
 
аутентификацию я руками вожу, а потом в Firebug смотрю, что посылал и что пришло.
JSESSIONID - это имя Cookie, а 68990d1f5fc1ff5e9d6f12676844 - содержимое.
Сейчас пробую с WebBrowser, но получить Html с нужным текстом, а не <span class="text_gray">25 січ 2011</span> в ячейках не получается.

как в браузере этот текст <span class="text_gray">25 січ 2011</span> отобразился?
вместо &#1089 в текстовом документе ячейка с січ
 
ты можешь до посинения вводить логин/пароль в браузере, к запросу, отправляемому программно это не имеет никакого отношения.

JSESSIONID - это имя Cookie, а 68990d1f5fc1ff5e9d6f12676844 - содержимое.
очень тонкое замечание. Затык в том, что этот ID генерится для каждой сессии заново. Не все куки одинаково полезны, то есть не все то, что кука, сохраняется на диск.
 
там куки действуют определенное время.. Получить страницу по ссылке без проблем.
Ничего не пойму.. при вставке на хф это выглядит нормально <td class="edit_col_name">Номер оголошення у бюлетені:</td>

поставил пробелы
<td class="edit_col_name">& # 1053 ;& # 1086;& # 1084;& # 1077;& # 1088; & # 1086;&# 1075;о&# 1083;ош&# 1077;ння &# 1091; &# 1073;&# 1102;&# 1083;&# 1077;&# 1090;&# 1077;&# 1085;&# 1110;:</td>
 
Кто может помочь в создании сайта???
 
могу, но я с дизайном не особо. Что за сайт?
Тут люди есть продвинутей в этой сфере и я на Asp.net



поставил пробелы
<td class="edit_col_name">& # 1053 ;& # 1086;& # 1084;& # 1077;& # 1088; & # 1086;&# 1075;о&# 1083;ош&# 1077;ння &# 1091; &# 1073;&# 1102;&# 1083;&# 1077;&# 1090;&# 1077;&# 1085;&# 1110;:</td>

это оказывается кодировка русских букв такая..
нашел таблицу с символами, попробую функцию написать по перекодированию.
Может есть готовое решение? Или сталкивался кто?
 
Останнє редагування:
Может есть готовое решение? Или сталкивался кто?
Давно было. Поищи тут:
⚠ Тільки зареєстровані користувачі бачать весь контент та не бачать рекламу.

При наличии таблицы перекодировки проблема с написанием функции? :eek:
 
Проблем нет с функцией.. Устал за день вот и нет желания делать самому.
 
это оказывается кодировка русских букв такая..
нашел таблицу с символами, попробую функцию написать по перекодированию.
Может есть готовое решение? Или сталкивался кто?

конечно есть System.Web.HttpUtility.UrlDecode()
 
Останнє редагування:
Назад
Зверху Знизу