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

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

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

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 22.11.2013, 22:49   #1
Fahman
Форумчанин
 
Аватар для Fahman
 
Регистрация: 03.04.2013
Сообщений: 703
Сообщение Парсинг данных, (в WebBrowser) Часть-2 Полное описание=)

Доброго времени суток Господа! Cовсем недавно я начал изучать парсинг, и мне тут помогли) за что отдельное спасибо, но у меня тут образовалась проблемка....
Вот например код такой........

Код:
var
  DocA: IHTMLElementCollection;
  doc: IHTMLDocument2;
  Element: IHTMLElement;
  i: integer;
  fl: boolean;
begin
  if (pDisp = CurDispatch) then
  begin
    doc := ((pDisp as IWebBrowser).Document as IHTMLDocument2);
    DocA := doc.body.all as IHTMLElementCollection;
    i := 0;
    fl := true;
    while (i < DocA.length) and fl do
    begin
      Element := DocA.item(i, 0) as IHTMLElement;
      if Element.className = 'body-table' then
      begin
        doc.body.innerHTML :=
          '<span class="time-text" id="time"></span>' + Element.outerHTML;
        fl := false;
      end;
      inc(i);
    end; (ASender as TWebBrowser)
    .show;
    CurDispatch := nil;
  end;
end;
с этим проблем нет....

Он чистит страницу от не нужных тегов, это ладно но вот как он работает? я таким способом хотел бы узнать как мне спарсить другой сайт? Прошу знающих растолковать мне что да как=) я ведь не понял если честно, в тегах запутался.... может вот приведу парочку примеров?
ну вы мне скажите что да как работать с тегами а дальше я сам хочу все делать, просто не хватает практики мне, ну и все)

Вот например эта ссылка
http://finviz.com/futures.ashx
Вот обычный сайт.... нужно отображать только вот это, как на картинке.


но пожалуйста, только можно с описанием мне разжевать что вы и как сделали? как работает ваш код, а лучше описание с тегами как вы работаете ну чтоб я вник во все это)

Красным я отметил то что надо мне видеть в браузере а синим то что не надо....

там после верхнего меню я например хочу спарсить остальное, там есть и "id" и 'class' но я не понимаю просто как все это так выбрать чтоб я мог отобразить только то что мне нужно....

вот еще 1 пример
http://finviz.com/map.ashx?t=sec

тоже надо загрузить в веббраузер....

или вот еще ссылка) http://finviz.com/futures_charts.ashx
ну там окошки маленькие, хотел бы отоброжать так как на сайте) Там можно еще посмотреть ее в большом размере я уже понял как ее отобразить а вто чтоб как тут не знаю как

Может есть другие методы? был бы раз освоить, но самое главное мне надо парсить так чтоб все было как на сайте точ в точ и чтобы все скрипы все работало... просто удалять не нужное с сайта и все... давайте обсудим все что да как) по чуть чуть я хочу полностью освоить парсинг)

если можно кто что сможет, дайте инфу с полным описанием... ну как вы парсите нужный вам сайт и как вы среди тегов находите только то что вам нужно...

P.S. Админ иди Модератор, не закрывайте тему плиз) она последняя от меня про парсинг.... Хочу научиться и у меня много вопросов на которых нет ответа)
99% ошибок компьютера сидит в полуметре от монитора.
Fahman вне форума
Старый 23.11.2013, 17:58   #2
Fahman
Форумчанин
 
Аватар для Fahman
 
Регистрация: 03.04.2013
Сообщений: 703
По умолчанию

Эй меня кто нить слышит? сказал как в бездну крикнул...=)
99% ошибок компьютера сидит в полуметре от монитора.
Fahman вне форума
Старый 23.11.2013, 18:37   #3
bakanaev
Форумчанин
 
Регистрация: 27.03.2012
Сообщений: 438
По умолчанию

На эй тут ни кто откликаться не будет. По делу - много букв, но ни чего не понятно.
Если по делу то, чтобы получить html код старницы используйте лучше IdHTTP, пример кода
Код:
procedure Pars;
var
  Html: String;
begin
  Html := IdHTTP1.GET('http://finviz.com/futures_charts.ashx'); // получаем html код нужной страницы.
  ... // Тут парсим нужные значения. Вам в помощь  Copy и Pos (функции). 
end;
bakanaev вне форума
Старый 23.11.2013, 18:57   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
меня кто нить слышит?
Узбагойся, ты ниадин.
Никто ниче не понял, газслабьзя.
I'm learning to live...
Stilet вне форума
Старый 23.11.2013, 19:57   #5
Fahman
Форумчанин
 
Аватар для Fahman
 
Регистрация: 03.04.2013
Сообщений: 703
По умолчанию

Цитата:
Сообщение от bakanaev Посмотреть сообщение
На эй тут ни кто откликаться не будет. По делу - много букв, но ни чего не понятно.
Если по делу то, чтобы получить html код старницы используйте лучше IdHTTP, пример кода
Код:
procedure Pars;
var
  Html: String;
begin
  Html := IdHTTP1.GET('http://finviz.com/futures_charts.ashx'); // получаем html код нужной страницы.
  ... // Тут парсим нужные значения. Вам в помощь  Copy и Pos (функции). 
end;
я это понял, но я же дал исходник=) там просто в тегах проблема я в них запутался и все) даже скрины сделал чтобы все видели для примера. и я не прошу мне все сделать а прошу лишь чуть объяснить принцип работы с тегами!=)
99% ошибок компьютера сидит в полуметре от монитора.
Fahman вне форума
Старый 23.11.2013, 21:41   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Рекомендую к изучению:
http://msdn.microsoft.com/en-us/library/aa752574.aspx
http://www.compress.ru/article.aspx?id=10942&iid=439
I'm learning to live...
Stilet вне форума
Старый 24.11.2013, 00:18   #7
-=Virus=-
Форумчанин
 
Аватар для -=Virus=-
 
Регистрация: 03.07.2009
Сообщений: 246
По умолчанию

Цитата:
Сообщение от Fahman Посмотреть сообщение
я это понял, но я же дал исходник=) там просто в тегах проблема я в них запутался и все) даже скрины сделал чтобы все видели для примера. и я не прошу мне все сделать а прошу лишь чуть объяснить принцип работы с тегами!=)
Тебе надо вытащить текст между тегами в данном случаи <div id="futures_quotes"> и </div>. Там и находиться твоя табличка. Но это ещё не всё что бы всё корректно работало нужно ещё и добавить в html код текст, который находиться
между тегами <head> и </head> в этом случаи у тебя всё будет работать замечательно.

Вот держи полностью рабочий код.
Код:
unit Unit1;

interface

uses
  ...... MSHTML, activex;


type
  TForm1 = class(TForm)
    WebBrowser1: TWebBrowser;
    Button1: TButton;
    IdHTTP1: TIdHTTP;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;


var
  Form1: TForm1;



implementation

{$R *.dfm}



function Pars(str:String;str_begin:String;str_end:String;count:integer):String; 
begin
   Delete(str,1,pos(str_begin,str)+length(str_begin));
   Delete(str,pos(str_end,str)-count,length(str));
   Pars:=str;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
 Str, Head : String;
 v: Variant;
 HTMLDocument: IHTMLDocument2;
begin
 //Тут мы добавляем нужные скрипт для корректной работы.
 head :=
 '<head>'
+'<link rel="stylesheet" href="http://finviz.com/finviz.css?rev=60" type="text/css">'
+'<link rel="shortcut icon" href="http://finviz.com/favicon.ico">'
+'<script src="http://finviz.com/script/boxover.js?rev=2" type="text/javascript"></script>'
+'<script src="http://finviz.com/script/lightup.js?rev=1" type="text/javascript"></script>'
+'<script src="http://finviz.com/script/search.js?rev=4" type="text/javascript"></script>'
+'<script src="http://finviz.com/script/time.js?rev=19" type="text/javascript"></script>'
+'<script src="http://finviz.com/script/menu.js" type="text/javascript"></script>'
+'<script src="http://finviz.com/script/ajax.js" type="text/javascript"></script>'
+'<script src="http://finviz.com/script/futures.js" type="text/javascript"></script>'
+'</head>';


 Str := idHttp1.Get('http://finviz.com/futures.ashx'); 
 Str := Pars(Str, '<div id="futures_quotes">', '</div>', 0); //Вырезаем нужную нам таблицу 

 Webbrowser1.Navigate('about:blank');
 //Тут мы вставляем так же ссылки в html код где нужно, что бы всё красиво выгляело
 Str := StringReplace(Str, 'src="', 'src="http://finviz.com/',[rfReplaceAll, rfIgnoreCase]);
 Str := StringReplace(Str, 'href="', 'href="http://finviz.com/',[rfReplaceAll, rfIgnoreCase]);
 Str := StringReplace(Str, 'fut_chart', 'http://finviz.com/fut_chart',[rfReplaceAll, rfIgnoreCase]);

 //И наконец отправляем весь код в браузер
 HTMLDocument := WebBrowser1.Document as IHTMLDocument2;
 v := VarArrayCreate([0, 0], varVariant);
 v[0] := Head + Str;
 HTMLDocument.Write(PSafeArray(TVarData(v).VArray));
 HTMLDocument.Close;

end;

end.
Исходник ниже
Вложения
Тип файла: zip Project.zip (5.1 Кб, 56 просмотров)

Последний раз редактировалось -=Virus=-; 24.11.2013 в 00:23.
-=Virus=- вне форума
Старый 24.11.2013, 10:12   #8
Fahman
Форумчанин
 
Аватар для Fahman
 
Регистрация: 03.04.2013
Сообщений: 703
По умолчанию

Цитата:
Сообщение от -=Virus=- Посмотреть сообщение
Тебе надо вытащить текст между тегами в данном случаи <div id="futures_quotes"> и </div>. Там и находиться твоя табличка. Но это ещё не всё что бы всё корректно работало нужно ещё и добавить в html код текст, который находиться
между тегами <head> и </head> в этом случаи у тебя всё будет работать замечательно.
Спасибо..... чуть более менее начал понимать..... можно ваши контактные данные? я для себя)

столкнулся с проблемой=)


при компиляции вышло

Вроде кинул все что надо было, браузер idhttp и кнопку, на кнопку вписал то что вы мне дали.....

были еще 2 проблемы!

1) Socket Error #10054 Выходила ошибку исправил idHTTP.Disconnect;

2) при клике еще раз на кнопку то загружается веббраузер но об абсолютно пустой.... не выходит все что мне нужно......

Кстати еще 1 вопрос от меня=)
вот например я хочу сделать запрет на переход по страницам
примерно так
if url<>'http://google.ru/' then cancel:=true;
ставлю но что то браузер открывает эту страничку=)

как исправить вторую ошибку?
99% ошибок компьютера сидит в полуметре от монитора.

Последний раз редактировалось Stilet; 24.11.2013 в 12:23.
Fahman вне форума
Старый 24.11.2013, 12:27   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
при компиляции вышло
Это не при компиляции а при выполнении. На какой строке?
Цитата:
Socket Error #10054 Выходила ошибку исправил idHTTP.Disconnect;
Это socket error 10054 connection reset by peer. Тебя файерволл гасит, или антивирус.
Цитата:
но что то браузер открывает эту страничку
Запрет делается в событии OnBeforeNavigate2, в котором выставляется параметр cancel в false.
I'm learning to live...
Stilet вне форума
Старый 24.11.2013, 12:35   #10
Fahman
Форумчанин
 
Аватар для Fahman
 
Регистрация: 03.04.2013
Сообщений: 703
По умолчанию

Str := Pars(Str, '<div id="futures_quotes">',
'</div>', 0);

Вот тут выдает.....
99% ошибок компьютера сидит в полуметре от монитора.
Fahman вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Webbrowser и парсинг содержимого страницы Дима я Работа с сетью в Delphi 14 02.07.2015 16:50
Парсинг или часть странички в webbrowser? Как лучше? Fahman Общие вопросы Delphi 32 18.11.2013 15:59
олимпиадная задача на паскале шоколадные плитки...нужно полное словесное описание sexyanet Помощь студентам 4 27.12.2011 00:18
описание свойств webbrowser Анастасия123456789 Работа с сетью в Delphi 10 25.12.2011 14:41
Парсинг c webbrowser Arsenx777 Общие вопросы Delphi 3 02.11.2011 23:08