|
#1
|
|||
|
|||
Простой парсинг
Здравствуйте, хочу научиться для себя парсить сайты с помощью Synapse. В качестве примера взял сайт pikabu. Снифером внимательно отследил данные, отправил их методом POST, залогинелся, но вот как уже под своим логином перейти на другую страницу этого ресурса и выгрузить html код страницы?
Попробовал реализовать следующим образом: Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, httpsend, ssl_openssl, StdCtrls; type TForm1 = class(TForm) btn1: TButton; mmo1: TMemo; edt1: TEdit; procedure btn1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} function FoundLocationStrNum(Headers: TStringlist): integer; var FoundStrPos, i: integer; begin Result := -1; for i := 0 to Headers.Count do begin FoundStrPos := Pos('Location: ', Headers.Strings[i]); if FoundStrPos > 0 then begin Result := i; exit; end; end; end; function GetHTTPStr(http: THTTPSend): string; var BodyStream: TStringStream; BodyS: TStringList; begin try BodyS := TStringList.Create; BodyStream := TStringStream.Create(result); begin BodyS.LoadFromStream(http.Document); result := BodyS.Text; end; finally BodyStream.Free; BodyS.Free; end; http.Document.Seek(0, soFromBeginning); end; procedure TForm1.btn1Click(Sender: TObject); var httpsend: THTTPSend; stream: TStringStream; n: integer; NewURL, result: string; Res: boolean; begin httpsend:= THTTPSend.Create; stream := TStringStream.Create(''); stream.WriteString('mode=login&username=***&password=***&remember=1'); Application.ProcessMessages; httpsend.MimeType := 'application/x-www-form-urlencoded'; httpsend.Document.LoadFromStream(stream); Res := httpsend.HTTPMethod('post', 'http://pikabu.ru/ajax/ajax_login.php'); Application.ProcessMessages; case httpsend.ResultCode of 301, 302, 307: begin n := FoundLocationStrNum(httpsend.Headers); if (n >= 0) and (n <= httpsend.Headers.count) then begin httpsend.Clear; httpsend.HTTPMethod('GET', edt1.Text); Application.ProcessMessages; mmo1.Lines.Text := GetHTTPStr(httpsend); Application.ProcessMessages; end; end; end; httpsend.HTTPMethod('GET', edt1.Text); Application.ProcessMessages; mmo1.Text:=Utf8ToAnsi(GetHTTPStr(httpsend)); end; end. Цитата:
|