Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.04.08;
Скачать: CL | DM;

Вниз

Delphi получить html код по заданному URL   Найти похожие ветки 

 
adamst ©   (2007-03-02 12:29) [0]

проблема така надобно получить текст, в смысле html код заданной страницы из интернета


 
adamst ©   (2007-03-02 12:43) [1]

вот примерчик... но работает криво... у меня тока с локально сайта тока получилось снять код html
function wget(url: string): string;
var  s: string;
    i: integer;
begin
 if LeftStr(url, 7) = "http://" then Delete(url, 1, 7);
 s := Copy(url, 1, Pos("/", url) - 1);
 if Pos("/", url) = 0 then s := url;
 Result := "";  with Form1 do
 begin
   IdHTTP1.Host := s;
//    IdHTTP1.Host := "http://www.gismeteo.ru";
   try
     IdHTTP1.Connect;
     try
       Result := IdHTTP1.Get("http://" + url);
     except
    end;
 finally
   IdHTTP1.Disconnect;
   end;
 end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
// memo1.text:=wget("www.gismeteo.ru/towns/27962.htm");
memo1.text:=wget("ya.ru");
end;


 
Dmitrij_K   (2007-03-02 12:47) [2]

.Get сам connect делает
Достаточно
string := idhttp.Get("http://www.ru");

+ см. UrlDownloadFile()


 
adamst ©   (2007-03-02 12:50) [3]

спасибо... похоже ты прав... закоментил IdHTTP1.Connect; вроде что то начало получатся.....


 
adamst ©   (2007-03-02 12:51) [4]

Стоять UrlDownloadFile() это где смотреть... что такое?!.... колись...


 
Dmitrij_K   (2007-03-02 12:52) [5]


> adamst ©   (02.03.07 12:51) [4]
>
> Стоять UrlDownloadFile() это где смотреть... что такое?!
> .... колись...

google знает
Ж)


 
adamst ©   (2007-03-02 13:10) [6]

эххх.... не совсем то что надо... на странице скрипт выводит www.gismeteo.ru/towns/27962.htm интересующюю часть .... а спомощью компоненты idhttp это не выполнятеся, конкретно мне надо на  странице таблицу с прогнозом погоды... скопировать из html  и сунуть в свою страницу этот код...


 
adamst ©   (2007-03-02 13:49) [7]

Еще разок рабочий код... но он тупо скачивает html страничку... не ту которую вы увидите запустив ее, т.е. не измененную скриптами.... а вот в этом и заключается проблема!!!!!
function wget(url: string): string;
var  s: string;
    i: integer;
begin
 if LeftStr(url, 7) = "http://" then Delete(url, 1, 7);
 s := Copy(url, 1, Pos("/", url) - 1);
 if Pos("/", url) = 0 then s := url;
 Result := "";  with Form1 do
 begin
   IdHTTP1.Host := s;
//    IdHTTP1.Host := "http://www.gismeteo.ru";
   try
 //    IdHTTP1.Connect;
     try
       Result := IdHTTP1.Get("http://" + url);
     except
    end;
 finally
   IdHTTP1.Disconnect;
   end;
 end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
// memo1.text:=wget("www.gismeteo.ru/towns/27962.htm");
memo1.text:=wget("www.gismeteo.ru/towns/27962.htm");
memo1.Lines.SaveToFile("d:\1.html");
end;


 
adamst ©   (2007-03-02 13:58) [8]

с компоненты WebBrowser1 как получить код html или сохранить html  в файл


 
Плохиш ©   (2007-03-02 15:17) [9]


> adamst ©   (02.03.07 13:58) [8]


 sHTML := (WebBrowser1.Document as IHTMLDocument2).body.innerHTML ;


 
adamst ©   (2007-03-02 15:34) [10]

IHTMLDocument2 какую библиотеку надо подключить чтобы не ругался на этот тип переменных?!


 
Плохиш ©   (2007-03-02 15:36) [11]

mshtml


 
adamst ©   (2007-03-02 15:36) [12]

ведь мне надо будет описать переменную
Var sHTML : IHTMLDocument2;
[Error] Unit1.pas(60): Undeclared identifier: "IHTMLDocument2"


 
adamst ©   (2007-03-02 15:43) [13]

procedure TForm1.Button1Click(Sender: TObject);
Var sHTML: WideString;
begin
// memo1.text:=wget("www.gismeteo.ru/towns/27962.htm");
memo1.text:=wget("www.gismeteo.ru/towns/27962.htm");
memo1.Lines.SaveToFile("d:\1.html");
form1.WebBrowser1.Navigate("d:\1.html");
sHTML := (WebBrowser1.Document as IHTMLDocument2).body.innerHTML ;
try
//WebBrowser1.ExecWB(OLECMDID_SAVE, OLECMDEXECOPT_PROMPTUSER);
except
end;
end;

выдает ошибку.... помогите


 
easy ©   (2007-03-02 17:42) [14]

http://www.swissdelphicenter.ch/torry/showcode.php?id=1112


 
adamst ©   (2007-03-05 16:19) [15]

спасибо easy если бы раньше увидел то сделал бы так.... но сейчас я реализовал возможность закачки и подправки следующим образом... суть программы с gismeteo.ru скачать погоду для моего города и выложить на локальном сайте... т.к. закачивается только текс, то трафик сжирается минимума вот мой слегка кривоватый код.... некогда было мудрить...

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
 IdHTTP, StdCtrls,StrUtils, HTTPApp, OleCtrls, SHDocVw, ComCtrls,
 ExtCtrls;

type
 TForm1 = class(TForm)
   Button1: TButton;
   IdHTTP1: TIdHTTP;
   Memo1: TMemo;
   Memo2: TMemo;
   procedure Button1Click(Sender: TObject);
   procedure FormCreate(Sender: TObject);
   procedure FormShow(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

function wget(url: string): string;
var  s: string;
    i: integer;
begin
 if LeftStr(url, 7) = "http://" then Delete(url, 1, 7);
 s := Copy(url, 1, Pos("/", url) - 1);
 if Pos("/", url) = 0 then s := url;
 Result := "";  with Form1 do
 begin
   IdHTTP1.Host := s;
//  IdHTTP1.Host := "http://www.gismeteo.ru";
   try
 //    IdHTTP1.Connect;
     try
       Result := IdHTTP1.Get("http://" + url);
     except
    end;
 finally
   IdHTTP1.Disconnect;
   end;
 end;
end;

procedure TForm1.Button1Click(Sender: TObject);
Var sHTML: WideString;
       i: integer;
       p: integer;
       s,s1: WideString;
       st : string;
begin
//<script language=JavaScript> var frc="<table border=0 cellpadding=1 cellspacing=2 width="100%"><tr><td colspan=8>
memo1.text:=wget("www.gismeteo.ru/towns/27962.htm");
memo1.Lines.SaveToFile("d:\1.htm");
s1:="";
For i:=0 to Memo1.Lines.Count do
 Begin
  s:=memo1.Lines[i];
 p:=1;
 While p>0 Do
 Begin
  P:=pos(#13,s);
   If P>0 Then Delete(s, P,1);
 End;
  s1:=s1+s;
 End;
//memo2.text:=s1;
 p:=pos("<script language=JavaScript> var frc", s1);
 i:=P;

 For i:=P To Length(s1) do
 Begin
  st:=Copy(s1,i,18);
  If st="</td></tr></table>" then Break;
 End;
 //Получение таблицы где находится данные о погоде за 3 дня
 s:=Copy(s1,p+38,(i-p+18-38));

 //Удаление не нужной информации с таблицы... ссылки, заметочки и  тп...
 p:=1;
 While p>0 do
 Begin
  p:=pos("http://img.gismeteo.ru/images/",s);
  if P>0 then
  Begin
   st:=Copy(s,p,23);
   Delete(s,p,23);
  End;
 End;

 p:=pos("<a target="_blank" href="http://www.gismeteo.ru">",s);
 If P>0 then
 Begin
  st:=Copy(s,P,47);
  Delete(s,P,47);
 End;
 i:=1;
 p:=1;
 While (p>0)and(i>0) Do
 Begin
  i:=pos("<a",s);
  p:=pos("</a>",s);
  If (i>0)and(p>0) Then
   Begin
    st:=Copy(s,i,p-i+4);
    Delete(s,i,p-i+4);
   End;
 End;
//Подстановка в шаблон
 Memo2.Lines[6]:=s;
 Memo2.Lines.SaveToFile("C:\Inetpub\wwwroot\pogoda.htm");
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
   Form1.Button1Click(Sender);
end;

procedure TForm1.FormShow(Sender: TObject);
begin
  Form1.close();
end;

end.


 
Нуб   (2007-03-05 16:26) [16]

а че ты на формкриэйт вызываешь процедуру батон клик а просто без батон кликов ? :) и на формшоу делаешь клоуз , я ща лусну со смеху


 
adamst ©   (2007-03-12 11:26) [17]

Нуб   (05.03.07 16:26) [16]
а че ты на формкриэйт вызываешь процедуру батон клик а просто без батон кликов ? :) и на формшоу делаешь клоуз , я ща лусну со смеху

Согласен не красиво... если не разобратся, то чуш полная! но работает... смысл в том что бы когда ворма покажется, то весь код уже выполнится, и страница html сформируется .... вот программа и закрывается... а запускается она по расписанию в планировщике... я ее даже и не вижжу...


 
DiamondShark ©   (2007-03-14 16:28) [18]

Завтра гисметео стукнет моча в левую пятку, и они изменят дизайн страницы.
И что?

Специально для кулибиных гисметео поставляет ту же информацию в XML

http://informer.gismeteo.ru/xml/27962_1.xml



Страницы: 1 вся ветка

Текущий архив: 2007.04.08;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.029 c
15-1173844847
balepa
2007-03-14 07:00
2007.04.08
WMKeeper


2-1173946249
Knight
2007-03-15 11:10
2007.04.08
Какой смысл в TDatabase?


15-1174069619
Kerk
2007-03-16 21:26
2007.04.08
Как в аське установить аватарку?


2-1173797301
koha
2007-03-13 17:48
2007.04.08
Интересный вопрос


15-1173767033
ProgRAMmer Dimonych
2007-03-13 09:23
2007.04.08
Нужен совет...