Enregistrer une page web [Résolu]

slhuilli 193 Messages postés lundi 7 janvier 2002Date d'inscription 7 juillet 2017 Dernière intervention - 22 sept. 2004 à 23:42 - Dernière réponse : jobtunisieyasser 127 Messages postés lundi 6 septembre 2004Date d'inscription 23 mars 2007 Dernière intervention
- 24 sept. 2004 à 17:39
je cherche a enregistrer une pge web donnée en parametre au format HTML sur mon disque (la meme chose que, sous IE, menu fichier->enregistrer sous avec "page web complete d'activer))

si qq'un sait faire.....

merci
Afficher la suite 

4 réponses

Répondre au sujet
arnaud_tournier 35 Messages postés jeudi 16 septembre 2004Date d'inscription 25 mars 2007 Dernière intervention - 23 sept. 2004 à 14:08
+3
Utile
Salut,

voila un petit code qui pourra résoudre ton probleme

fait un uses de idHTPP

procedure TForm1.Button1Click(Sender: TObject);
var idHTTP : TIdHTTP;
MemoryStream : TMemoryStream;
begin
idHTTP := TIdHTTP.Create(nil);
MemoryStream := TMemoryStream.Create;
idHTTP.Get('http://www.delphifr.com',MemoryStream);
MemoryStream.SaveToFile('c:\toto.html');
FreeAndNil(MemoryStream);
FreeAndNil(idHTTP);
end;

apres si tu veux aussi les fischiers liés, il faut que tu parcours ton stream ou ton fichier et que tu le parses pour en extraire les liens et les sauvegarder, puis modifie tous les liens absolues en liens relatifs qui pointes sur le bon rep...

Dis moi si ca te convient, je te donnerais d autres trucs si ca va pas...

Arnaud
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de arnaud_tournier
slhuilli 193 Messages postés lundi 7 janvier 2002Date d'inscription 7 juillet 2017 Dernière intervention - 23 sept. 2004 à 22:26
0
Utile
presque parfait....
Comme tu en parles, j'aurais aimé avoir TOUTES la pages, imags comprises ? Est- ce abusé de te demander comment je peux le faire ?

Merci

NB : tu parles de parser. j'entends ca a toutes les sauces . C'est quoi parser ?
Commenter la réponse de slhuilli
arnaud_tournier 35 Messages postés jeudi 16 septembre 2004Date d'inscription 25 mars 2007 Dernière intervention - 24 sept. 2004 à 12:46
0
Utile
En fait, parser un fichier veut tout simplement dire analyser le fichier pour en retirer ce qui t intérresse. Dans ton cas, il faut que tu recherche toutes les pages et les images associées dans ta page et que tu les téléchargent, J ai modifie le petit bout de coe que je t avais donne pour qu il convienne peut etre un peu miseux a ce que tu recherche....

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Déclarations privées }
function enregistre(sHost, sBaseFichier, sURL: String) : String;
function RechercheEtEnregistre(sHost, sBaseFichier : String; var sTextASauver, sText : String; sDeLaBalise, sALaBalise: String): String;
function Parse(sHost, sBaseFichier, sText : String) : String;
public
{ Déclarations publiques }
end;

var
Form1: TForm1;

implementation

uses idHTTP;

{$R *.dfm}

function TForm1.enregistre(sHost, sBaseFichier, sURL: String) : String;
var idHTTP : TIdHTTP;
MemoryStream : TMemoryStream;
sTmp : String;
sDir : String;
begin
idHTTP := TIdHTTP.Create(nil);
if sHost = '' then
begin
try
idHTTP.Get(sURL);
sHost := 'http://' + idHTTP.Host;
Except on exception do
begin
result := '';
exit;
end;
end;
end;
MemoryStream := TMemoryStream.Create;
if pos(sHost, sURL) > 0 then
begin
sTmp := copy(sURL,pos(sHost, sURL) + length(sHost),length(sURL));
end
else
begin
sTmp := sURL;
end;
try
try
idHTTP.Get(sHost + sTmp,MemoryStream);
Except on exception do
begin
Result := enregistre('', sBaseFichier, sURL);
exit;
end;
end;
sTmp := StringReplace(sTmp,'/','\',[rfReplaceAll]);
ForceDirectories(sBaseFichier + idHTTP.Host);
sTmp := StringReplace(sTmp, '|','_',[rfReplaceAll]);
sTmp := StringReplace(sTmp, '*','_',[rfReplaceAll]);
sTmp := StringReplace(sTmp, ':','_',[rfReplaceAll]);
sTmp := StringReplace(sTmp, '?','_',[rfReplaceAll]);
sTmp := sBaseFichier + idHTTP.Host + '\' + sTmp;
sDir := ExtractFileDir(sTmp);
ForceDirectories(sDir);
if ExtractFilename(sTmp) = '' then
begin
sTmp := sTmp + '\index.html';
end;
MemoryStream.SaveToFile(sTmp);
FreeAndNil(MemoryStream);
FreeAndNil(idHTTP);
result := sTmp;
except on e:Exception do
begin
showMessage(e.Message);
result := '';
end;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
sFilename : String;
slTmp : TStringList;
begin
sFilename := enregistre('http://www.delphi.fr', 'c:\', '');
slTmp := TStringList.Create();
slTmp.LoadFromFile(sFilename);
slTmp.Text := Parse('http://www.google.fr', 'c:\', slTmp.Text);
slTmp.SaveToFile(sFilename);
FreeAndNil(slTmp);
end;

function TForm1.RechercheEtEnregistre(sHost, sBaseFichier : String; var sTextASauver, sText : String; sDeLaBalise, sALaBalise: String): String;
var
sTmp, sOldTmp : String;
sFilename : String;
begin
Result := sTextASauver;
While pos(sDeLaBalise, sText) > 0 do
begin
sTmp := copy(sText, pos(sDeLaBalise, sText) + length(sDeLaBalise), length(sText));
if sTmp <> '' then
begin
sTmp := copy(sTmp,1, pos(sALaBalise, sTmp) - 1);
if sTmp <> '' then
begin
sFileName := enregistre(sHost, sBaseFichier, sTmp);
Result := StringReplace(Result,sDeLaBalise + sTmp + sALaBalise, sDeLaBalise + 'file://' + sFileName + sALaBalise,[]);
sText := StringReplace(sText,sDeLaBalise + sTmp + sALaBalise, '',[]);
end;
end;
end;
end;

function TForm1.Parse(sHost, sBaseFichier, sText: String): String;
begin
result := sText;
result := RechercheEtEnregistre(sHost, sBaseFichier, result, sText, 'src=''', '''');
result := RechercheEtEnregistre(sHost, sBaseFichier, result, sText, 'src="', '"');
result := RechercheEtEnregistre(sHost, sBaseFichier, result, sText, 'src=', '>');
result := RechercheEtEnregistre(sHost, sBaseFichier, result, sText, 'href=''', '''');
result := RechercheEtEnregistre(sHost, sBaseFichier, result, sText, 'href="', '"');
result := RechercheEtEnregistre(sHost, sBaseFichier, result, sText, 'href=', '>');
end;

end.

Arnaud
Commenter la réponse de arnaud_tournier
jobtunisieyasser 127 Messages postés lundi 6 septembre 2004Date d'inscription 23 mars 2007 Dernière intervention - 24 sept. 2004 à 17:39
0
Utile
arnaud_tournier !!! 8-)
Cool
Jézeka ALLAh'o khyaran

@_______=-Jobtunisie-=_______@
|..................NOURON ALA NOUR.......................|
Commenter la réponse de jobtunisieyasser

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.