1. BanDiTuK13.03.2025 в 15:53от
Загрузка...

[Delphi 7]Немогу нормально спарсить логины.

Тема в разделе "С/С++/Pascal/Delphi", создана пользователем Dover, 07.12.2013.

  1. Dover

    Dover

    Статус:
    Оффлайн
    Регистрация:
    03.12.12
    Сообщения:
    110
    Репутация:
    24 +/-
    И так ребята немогу нормально спарсить логины с одного сайта..
    Вот сам код:
    Код:
    unit Unit1;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdHTTP,
      StdCtrls, Spin, ExtCtrls;
    
    type
      TForm1 = class(TForm)
        Button1: TButton;
        Edit1: TEdit;
        IdHTTP1: TIdHTTP;
        Memo1: TMemo;
        Label1: TLabel;
        SpinEdit1: TSpinEdit;
        Label2: TLabel;
        GroupBox1: TGroupBox;
        Button3: TButton;
        Button2: TButton;
        Label3: TLabel;
        Label4: TLabel;
        Label5: TLabel;
        Label6: TLabel;
        Label7: TLabel;
        Label8: TLabel;
        Label9: TLabel;
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
        procedure Button3Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;
    
         TNewThread = class(TThread)
      private
      protected
        procedure Execute; override;
      public
        constructor Create(CreateSuspended: Boolean);
      end;
    
    var
      Form1: TForm1;
      Work: boolean;
    
    implementation
    
    {$R *.dfm}
    
    constructor TNewThread.Create(CreateSuspended: Boolean);
     begin
     inherited Create(CreateSuspended);
    end;
    
    procedure TForm1.Button1Click(Sender: TObject);
    begin
     TNewThread.Create(false);
     end;
    
    procedure TForm1.Button2Click(Sender: TObject);
    begin
    Form1.Memo1.Lines.SaveToFile('logins.txt');   
    end;
    
    procedure TForm1.Button3Click(Sender: TObject);
    begin
    Form1.Memo1.Lines.Clear;
    end;
    
    procedure TnewThread.Execute;
    var StrPage,a1,a2, i1,ssilka: String;
    b1,b2, n, i: integer;
    begin
    form1.SpinEdit1.Value:=n;
    i:=1;
    while i>n do
    begin
    
    ssilka:=Form1.Edit1.Text;
    strPage:=Form1.IdHTTP1.Get(ssilka+''+inttostr(i)+'/');
    Work:=True;
    end;
    while Work do
    begin
    b1:=Pos('player/',StrPage)+7;
    
    Delete(StrPage,1,b1-1);
    b2:=Pos('/">',StrPage)-1;
    a1:=Copy(StrPage,1,b2);
    Form1.Memo1.Lines.Add(a1);
    if Pos('player/',strPage) > 0 then Work:=True else Work:=False;
    end;
    
    
     i := 0;
     while i < Form1.Memo1.Lines.Count do
     begin
       if Form1.Memo1.Lines.IndexOf(Form1.Memo1.Lines[i]) < i then
         Form1.Memo1.Lines.Delete(i)
       else
         inc(i);
     end;
    
     Form1.Label4.Caption:=IntToStr(Form1.Memo1.Lines.Count);
     Form1.Label9.Caption:=IntToStr(StrToInt(Form1.Label9.Caption)+1);
     i:=i+1
    end;
    
    end.
    Кто может помоч?
    парсить отсюда: не реклама!!!
     
  2. Job777

    Job777

    Статус:
    Оффлайн
    Регистрация:
    08.11.13
    Сообщения:
    10
    Репутация:
    2 +/-
    что не регуляркой?
     
  3. Dover

    Dover

    Статус:
    Оффлайн
    Регистрация:
    03.12.12
    Сообщения:
    110
    Репутация:
    24 +/-
    Регулярка тут причём? мне нужно спарсить вот так:
    Сначало 1 страницу потом вторую третью и т.д
     
  4. Indie

    Тру кодер
    Indie

    Статус:
    Оффлайн
    Регистрация:
    18.12.12
    Сообщения:
    901
    Репутация:
    192 +/-
    Странно ты пытаешься без регулярных выражений. Очень странно
     
  5. Подарок

    Подарок

    Статус:
    Оффлайн
    Регистрация:
    27.07.12
    Сообщения:
    1.439
    Репутация:
    357 +/-
    Либо используй функцию Copy,
    либо функцию Pars,
    либо регуляркой.
     
  6. Dover

    Dover

    Статус:
    Оффлайн
    Регистрация:
    03.12.12
    Сообщения:
    110
    Репутация:
    24 +/-
    И так полностю переделал софт опять я непойму что такое исправьте чтобы парсило в цикле от и до какой страницы.
    Код:
    unit Unit1;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdTCPConnection,
      IdTCPClient, IdHTTP, Spin, ExtCtrls, XPMan,SyncObjs;
    
    type
      TForm1 = class(TForm)
        Button1: TButton;
        IdHTTP1: TIdHTTP;
        GroupBox1: TGroupBox;
        Memo1: TMemo;
        Button2: TButton;
        Timer1: TTimer;
        Label1: TLabel;
        SpinEdit1: TSpinEdit;
        CheckBox1: TCheckBox;
        CheckBox2: TCheckBox;
        XPManifest1: TXPManifest;
        Label6: TLabel;
        Label7: TLabel;
        Button3: TButton;
        SpinEdit2: TSpinEdit;
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
        procedure Button3Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;
    
    type
    TSearch = class(TThread)
    protected
     procedure Execute;override;
    private
    ID:Integer;
    public
     constructor Create(SD:Boolean);
     procedure Sync;
    end;
    
    var
      Form1: TForm1;
      Work:boolean;
      Thread:Integer;
    
    implementation
    
    {$R *.dfm}
    
    procedure dubdel;
    var
      SL : TStringList;
      i : integer;
    begin
      SL := TStringList.Create;
      SL.Sorted := true;
      SL.Duplicates := dupIgnore;
      SL.AddStrings(form1.Memo1.Lines);
      form1.Memo1.Clear;
      form1.Memo1.Lines.AddStrings(SL);
      SL.Free;
    end;
    procedure parser(html:string);
    begin
    while Pos('<a href="/player/', html) <> 0 do
    begin
    Delete(html, 1, Pos('<a href="/player/', html) + Length('<a href="/player/') - 1);
    Form1.Memo1.Lines.Add(Copy(html, 1, Pos('/">', html) - 1));
    Application.ProcessMessages;
    end;
    end;
    
    constructor TSearch.Create(SD: Boolean);
    begin
     inherited Create(SD);
    end;
    
    procedure TSearch.Execute;
    var
    i: Integer;
    HTTP:TIdHTTP;
    begin
    inc(Thread);
    inc(i);
    while Work do
    if Work then
    begin
    for i:= 1 to StrToInt(Form1.SpinEdit2.Text) do
    HTTP:=TIdHTTP.Create(nil);
    HTTP.Request.Host:='ensemplix.ru';
    HTTP.Request.UserAgent:='Opera/9.80 (Windows NT 6.2; WOW64) Presto/*********/2.12.388 Version/12.15';
    try
    parser(HTTP.Get('http://ensemplix.ru/ratings/money/' + IntToStr(i) + '/'));
    except
    HTTP.Free;
    i:= +1
    end;
    
    Synchronize(Sync);
    end;
    
    dec(Thread);
    if Thread = 0 then
    begin
    Form1.Button1.Enabled:=true;
    Form1.Button2.Enabled:=false;
    ShowMessage('Готово!');
    end;
    
    end;
    
    procedure TSearch.Sync;
    begin
    Form1.Label7.Caption:=inttostr(Form1.Memo1.Lines.Count);
    if Form1.CheckBox1.Checked = true then dubdel;
    if Form1.CheckBox2.Checked = true then Form1.Memo1.Lines.SaveToFile('emails.txt');
    end;
    
    procedure TForm1.Button1Click(Sender: TObject);
    var
    i:Integer;
    begin
    Button1.Enabled:=false;
    Button2.Enabled:=true;
    Work:=true;
    for i:=1 to SpinEdit1.Value do
    TSearch.Create(false);
    end;
    
    procedure TForm1.Button2Click(Sender: TObject);
    begin
    Button1.Enabled:=true;
    Button2.Enabled:=false;
    Work:=false;
    end;
    
    procedure TForm1.Button3Click(Sender: TObject);
    begin
    dubdel;
    end;
    
    end.
     
  7. Подарок

    Подарок

    Статус:
    Оффлайн
    Регистрация:
    27.07.12
    Сообщения:
    1.439
    Репутация:
    357 +/-
    Куча бесполезного кода, зачем его выкладывать полностью? Где там вообще парсинг?
     
  8. Dover

    Dover

    Статус:
    Оффлайн
    Регистрация:
    03.12.12
    Сообщения:
    110
    Репутация:
    24 +/-
    Зачем тебе вообще в мою тему заходить? если ты вообще не помогаешь? мне кажется ты просто посты набиваешь.
     
  9. Подарок

    Подарок

    Статус:
    Оффлайн
    Регистрация:
    27.07.12
    Сообщения:
    1.439
    Репутация:
    357 +/-
    Ты уже свои 50 набил, смени подпись.
     
  10. Dover

    Dover

    Статус:
    Оффлайн
    Регистрация:
    03.12.12
    Сообщения:
    110
    Репутация:
    24 +/-
    Так если ты умеешь писать софт! напиши парсер плиз...
     
  11. Подарок

    Подарок

    Статус:
    Оффлайн
    Регистрация:
    27.07.12
    Сообщения:
    1.439
    Репутация:
    357 +/-
    За кого то ничего не буду писать. Где копать я тебе указал, хочешь разбирайся, хочешь плачь.
     
  12. Dover

    Dover

    Статус:
    Оффлайн
    Регистрация:
    03.12.12
    Сообщения:
    110
    Репутация:
    24 +/-
    У меня всё норм! парсить мне регулярки ненужны pos тоже я уже всё сделал!!! мне нужно до заданной странице в spindedit дойти! тоесть сначало 1234566789 потом 10 страницы и до указанной парсить логины!!!!!!
     
  13. Xenozite

    Xenozite

    Статус:
    Оффлайн
    Регистрация:
    02.07.12
    Сообщения:
    335
    Репутация:
    149 +/-
    Ну так регулярки то юзать надо чтобы логины с каждой страницы дергать.
    Создаешь цикл от указанной до конечной страницы и внутри него получаешь код страницы по ссылке,в которую подставляешь переменную из цикла.
    После получения обрабатываешь страницу регулярками,в какой-нибудь общий стринглист складывая логины.
    Твой Pos и Copy годен разве что единичное значение дергануть,если же их много то без регулярок не обойтись.