Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.05.2012, 16:15   #1
Gudzik11
Форумчанин
 
Регистрация: 20.10.2011
Сообщений: 138
По умолчанию Парсинг

Здравствуйте!
Помогите ,пожалуйста ,вытащить значения для погоды c сайта http://meteo.ua/150/harkov/10-days

как только не пробовал получается херня полная!
Gudzik11 вне форума Ответить с цитированием
Старый 31.05.2012, 16:23   #2
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

показывайте как пробовали.
Человек_Борща вне форума Ответить с цитированием
Старый 01.06.2012, 07:48   #3
Gudzik11
Форумчанин
 
Регистрация: 20.10.2011
Сообщений: 138
По умолчанию

Пробовал так

Код:
unit Home;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdTCPConnection,
  IdTCPClient, IdHTTP, ECXMLParser, IniFiles;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    IdHTTP1: TIdHTTP;
    ECXMLParser1: TECXMLParser;
    Button2: TButton;
    procedure Pogoda(Sender: TObject);
    procedure Button1Click(Sender: TObject); //Погода
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  ini : TIniFile ;
implementation

{$R *.dfm}
procedure TForm1.Pogoda(Sender: TObject); //Погода
  var

   s: string ;
   a: array [1..20] of string ;
   i: Integer ;
   function Replace(Str, X, Y: string): string;
  {Str - строка, в которой будет производиться замена.
   X - подстрока, которая должна быть заменена.
   Y - подстрока, на которую будет произведена заменена}

  var
    buf1, buf2, buffer: string;


  begin
    buf1 := '';
    buf2 := Str;
    Buffer := Str;

    while Pos(X, buf2) > 0 do
    begin
      buf2 := Copy(buf2, Pos(X, buf2), (Length(buf2) - Pos(X, buf2)) + 1);
      buf1 := Copy(Buffer, 1, Length(Buffer) - Length(buf2)) + Y;
      Delete(buf2, Pos(X, buf2), Length(X));
      Buffer := buf1 + buf2;
    end;

    Replace := Buffer;
  end;
    procedure DrawXMLItem(XMLItem: TXMLItem);
  var
    t : Integer;

  begin
    for t := 0 to XMLItem.SubItemCount-1 do   DrawXMLItem(XMLItem.SubItems[t]);
    if Trim(XMLItem.Text)<>'' then  Memo1.Lines.Add(XMLItem.Text);

  end;
  procedure inif(Sender: TObject);
  var
    x,i,j:integer;
   begin
       x:= 1;
       i:= 0;
     while i < Memo1.Lines.Count do
     begin
       for j:= 0 to Memo1.Lines.Count do
         begin
          if i+j >= Memo1.Lines.Count then break;
          ini.WriteString('1', 'N' + IntToStr(j+1), Memo1.Lines[j+i]);
           end;
         inc(i, j);
         inc(x);
     end;
   end;

   begin
     i:=1;
      GetDir(0,s);                   //получить текущюю деректорию
      ini:= TIniFile.Create(s+'\ini.ini');
      IdHTTP1.HandleRedirects:=True;
      Memo1.Clear();        // очищяем memo1
      Memo1.Text:= IdHTTP1.Get('http://meteo.com.ua/print/150/harkov'); // Загружаем страницу
      memo1.text:=Copy(Memo1.Text,Pos('<div class="weather_wrap"><table class="table">',Memo1.Text),Length(Memo1.text)-pos('<div class="weather_wrap"><table class="table">',Memo1.Text));
      memo1.text:=Copy(memo1.text,1,Pos('<!-- weather_wrap -->',memo1.text)-23);
      Memo1.Text:=Replace(Memo1.Text,'&deg;','');
      Memo1.Lines.SaveToFile(s+'\1.htm');
      ECXMLParser1.LoadFromFile('1.htm');
      Memo1.Clear();        // очищяем memo1
      DrawXMLItem(ECXMLParser1.Root);
      Memo1.Text:=Utf8ToAnsi(Memo1.Text);
      DeleteFile(s+'\ini.ini');
      inif(nil);
   end;





procedure TForm1.Button1Click(Sender: TObject);
begin
  Pogoda(nil); //Погода
end;

end.
Gudzik11 вне форума Ответить с цитированием
Старый 01.06.2012, 09:23   #4
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

бред какой-то.
вы режете html код, потом сохраняете его как thml надеясь что та вырезка будет вообще работать.
А затем(!!) с какого перепугу, загоняете HTML код, в XML парсер. Да с чего вы взяли что HTML это XML?

Снифиром смотрите сайт. Может вам повезет и сайт сторит данные из JSON обьекта. Который можно будет попросить вместо готового html.
Человек_Борща вне форума Ответить с цитированием
Старый 01.06.2012, 10:08   #5
Gudzik11
Форумчанин
 
Регистрация: 20.10.2011
Сообщений: 138
По умолчанию

А кокой снифир использовать?

Вот нашёл такой сниффер Http AnalyzerStd V5
А что мне нужно найти ?
Я просто не разу не пользовался сниффером .

Последний раз редактировалось Stilet; 01.06.2012 в 18:59.
Gudzik11 вне форума Ответить с цитированием
Старый 01.06.2012, 23:52   #6
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
По умолчанию

Могу посоветовать Wireshark
Shouldercannon вне форума Ответить с цитированием
Старый 02.06.2012, 00:13   #7
Gudzik11
Форумчанин
 
Регистрация: 20.10.2011
Сообщений: 138
По умолчанию

У меня их уже целая пачка а как ими пользоваться ?
как мне узнать сайт http://meteo.ua/150/harkov/10-days сторит данные из JSON обьекта или нет ?
Gudzik11 вне форума Ответить с цитированием
Старый 02.06.2012, 00:39   #8
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
По умолчанию

Открываем снифер, выбираем нужный сетевой адаптер и протокол TCP далее запускаем отлов пакетов (Start). Открываем браузер и переходим по нужной ссылке. После загрузки страницы смотрим, что перехватил снифер. Перед запуском снифера лучше закрыть все программы, которые постоянно торчат в сети дабы не было месива, в котором будет трудно найти нужные пакеты.
JSON

Последний раз редактировалось Shouldercannon; 02.06.2012 в 00:48.
Shouldercannon вне форума Ответить с цитированием
Старый 02.06.2012, 01:24   #9
Gudzik11
Форумчанин
 
Регистрация: 20.10.2011
Сообщений: 138
По умолчанию

Спасибо сейчас попробую
Gudzik11 вне форума Ответить с цитированием
Старый 02.06.2012, 07:36   #10
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Уважаемый под HTTP, WireShark использовать не надо. Там и HTTP Analyzer'а хватит.

Первое что вам надо смотреть, это то, как получает данные браузер в первый рази ка он их обновляет(обновить страницу) даже в обоих случаях смотрите HEADER что отправил браузер и что прислал сервер.

Во привет браузера:

и вот ответ сервера:
Код:
(Status-Line):HTTP/1.1 200 OK
Server:nginx
Date:Sat, 02 Jun 2012 03:38:17 GMT

Content-Type:text/html; charset=utf-8 - Тип данных и их кодировка, пришедших к нам.

Transfer-Encoding:chunked

Connection:keep-alive - Соединение поддержживается сервером
Keep-Alive:timeout=10 - но не более 10 минут(?)

Vary:Accept-Encoding
Vary:Accept-Encoding

Expires:Thu, 19 Nov 1981 08:52:00 GMT

Cache-Control:no-store, no-cache, must-revalidate, post-check=0, pre-check=0

Pragma:no-cache

Set-Cookie:lastCities=YToxOntpOjE1MDthOjM6e3M6NzoiY2l0eV9pZCI7aToxNTA7czo3OiJuYW1lX3VhIjtzOjEyOiLQpdCw0YDQutGW0LIiO3M6NzoibmFtZV9ydSI7czoxNDoi0KXQsNGA0YzQutC%2B0LIiO319; expires=Sun, 02-Jun-2013 03:38:17 GMT; path=/ - данный кук мы должны запомнить

Content-Encoding:gzip - сюрприз, данные приходят в GZIP сжатии

Последний раз редактировалось Человек_Борща; 02.06.2012 в 07:53.
Человек_Борща вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
парсинг Pein95 Работа с сетью в Delphi 4 01.12.2011 02:06
Парсинг tigrend PHP 8 02.10.2011 00:09
парсинг Pein95 C# (си шарп) 3 16.09.2011 01:24
Парсинг DJ_LINZA Работа с сетью в Delphi 6 31.01.2011 10:15
Парсинг. igor90 Microsoft Office Excel 1 03.11.2010 02:41