WebBrowser Pobieranie linków ze strony

0

Witam.

Bardzo proszę o pomoc.

Chciałbym pobrać adresy wszystkich odnośników ze strony "strana x" i zapisać je do pliku.
W jaki sposób mógłbym to zrobić?

function  GetLinks(WebBrowser : TWebBrowser) : String;
for a := 0 to WebBrowser.OleObject.Document.Links.Length-1 do
s2:=s2+(WebBrowser.OleObject.Document.Links.Item(a).href)+#13;
Result:=s2;

Jak mam odpowiednio przerobić ten kod?

0

A po co chcesz przerabiać ten kod? Przecież jest chyba poprawny... :P
Po prostu wywołaj tę funkcję, a później wynik zapisz do pliku... ;)

0

a jak mam mu kazać pobrać te adresy do memo?

0
end;

function  GetLinks(WebBrowser : TWebBrowser) : String;

var
  Form1: TForm1;
       s: String ;
         b1: String ;
          b2: String ;
           s2 : String;
     a : Integer;
      I : integer;
       str : String;
       str2 : String ;

[Error] ftkpro.pas(63): Unsatisfied forward or external declaration: 'GetLinks'

procedure TForm1.Timer2Timer(Sender: TObject);
begin

for a := 0 to WebBrowser.OleObject.Document.Links.Length-1 do
s2:=s2+(WebBrowser.OleObject.Document.Links.Item(a).href)+#13;
Result:=s2;
end;

end.

[Error] ftkpro.pas(166): Object or class type required

proszę o pomoc

0

a jak mam mu kazać pobrać te adresy do memo?

Memo.Text := GetLinks(WebBrowser);

end;

function GetLinks(WebBrowser : TWebBrowser) : String;

var
Form1: TForm1;
s: String ;
b1: String ;
b2: String ;
s2 : String;
a : Integer;
I : integer;
str : String;
str2 : String ;

Tyyy... gdzieś Ty wsadził deklarację tej funkcji ? ^^
Wsadź ją do public... ;)

I po prostu wpisz ten kod:

function  GetLinks(WebBrowser : TWebBrowser) : String;
for a := 0 to WebBrowser.OleObject.Document.Links.Length-1 do
s2:=s2+(WebBrowser.OleObject.Document.Links.Item(a).href)+#13;
Result:=s2;

pod implementation... ;)

I w timerze wywołuj funkcję GetLinks, żeby było przejrzyściej ... ;)

0

szefie dzięki za odpowiedź ale mam problemik

robie tak

  public
  function  GetLinks(WebBrowser : TWebBrowser) : String;

[Error] ftkpro.pas(55): Unsatisfied forward or external declaration: 'TForm1.GetLinks'

i tu gitarka gra z timerem też sobie poradziłem ale ta procedura to mi nie gra ;/

implementation

do tej sekcji dodaje:

 begin
for a := 0 to WebBrowser.OleObject.Document.Links.Length-1 do
s:=s+(WebBrowser.OleObject.Document.Links.Item(a).href)+#13;
Result:=s;
end;

i mam taki problemik :/
[Error] ftkpro.pas(72): Object or class type required
[Error] ftkpro.pas(75): '.' expected but ';' found

0

i tu gitarka gra z timerem też sobie poradziłem ale ta procedura to mi nie gra ;/

implementation

do tej sekcji dodaje:

 begin
for a := 0 to WebBrowser.OleObject.Document.Links.Length-1 do
s:=s+(WebBrowser.OleObject.Document.Links.Item(a).href)+#13;
Result:=s;
end;

najprawdopodobniej problem w tym, że twój wrzucony web browser nazywa się webbrowser1 więc kod powinien wyglądać tak:

 begin
for a := 0 to WebBrowser1.OleObject.Document.Links.Length-1 do
s:=s+(WebBrowser1.OleObject.Document.Links.Item(a).href)+#13;
Result:=s;
end;
0

rzeczywiście mój błąd chodziło o głupią 1 moja nieuwaga! Bardzo dziękuje!

Wiele mi pomogliście i powiem Wam, że jeszcze troszkę i dam Wam spokój ;)

Mianowicie mam w memo dany "strumień" wierszy (ew. mogą to być dane z pliku )
np.
www.alfabeta.pl
www.alfabetagamma.pl
www.alfabeta.net
www.4programmers.net

i teraz haczyk polega na tym, że chciałbym aby program automatycznie
skopiował zawartość między 'www.' a '.net'
Gdy odnajdzie aby ją skopiował do następnego memo np. memo2 bądź zapisał do pliku.

To już moja ostatnia prośba do Was ;)

0
var
  i, pocz, kon: Integer;
begin
  for i:=0 to memo1.Lines.Count -1 do
  begin
    pocz := pos('www.',memo1.lines[i]) +4;
    kon := lastdelimiter('.', memo1.lines[i]);
    memo2.Lines.Add(copy(memo1.Lines[i], pocz, kon-pocz));
  end;
0

oki już wiem na czym polega problem

Ładnie pobiera linki i wyszukuje między nimi danej frazy ale jest mały mankament
user image
Zaznaczone na czerwono "kwadraciki" to zapewne entery tylko jak zrobić aby te kwadraty zamieniły się w enterki?

0

oki poradziłem sobie z tym problemem :)

I doszedlem do wniosku ze nie potrzebuje na razie kodu do pobierania danej frazy ale dziekuje Wam za niego.

Przyszedł mi do głowy prosty sposób (czy taki prosty to sie okarze ;)
mam plik bza.RFT
i plik sbza.RFT

plik bza.RFT ląduje do memo1 (to potrafie )
z memo jeden pierwszy wiersz ide do webbrowsera a nastepnie do memo2.
Chodzi mi o to aby usunął sie z memo1, został użyty jako adres w webbrowserze a następnie zawędrował do memo2. Na koniec z memo 2 zapisuje plik sbza.RFT

myślałem and tym i oto mój skrawek kodu proszę o pomoc w rozwinięciu go ;)

begin
Memo1.Lines.LoadFromFile('bza.RTF'); /// otwieram plik i laduje go do memo1
end;

var
i2 :integer;
begin
  for I:=0 to Memo1.Lines.Count-1 do begin
    WebBrowser1.Navigate(Memo1.Lines[i2]); // pobieramy adres z memo i idziemy do webbrowsera
  end;
end;

i teraz cały bajer jak zrobić aby osunąć wiersz z memo1 i wkleić go do memo2 ?

0
memo2.Lines.Add(memo1.Lines[i]);
memo1.Lines.Delete(i);

I coś widze, że deklarujesz zmienną "i2" a do pętli wykorzystujesz zmienną "I" ... ;>

0

znowu pomyłka ;)

hmm teraz brakuje mi pomysłu.

Może byś coś mi doradził...

mam baze danych z wpisem koło 5 000
i chciałbym aby te wpisy były odwiedzane.

Tylko sprawa wyglada tak
odpalam program dochodze do wpsiu np. numer 1250
wyłanczam program włanczam i znów ozaczyna od wpisu 1250 ;/

Mysle jakby zrobic aby zaczynal od wpisu 1250.
Myslałem żeby usuwał wpisy które odwiedził ale przy aktualaizacji bazy danych sie nadpisze i znowy bedize kicha...
po 2 chciałbym gdy przejedzie te 5000 wpisow i nie bedize nowych to zeby od poczatku je przelecial...

Nie mam pomysłu na to...

Myślałem żeby zorbić może tak:
pobiera linki ze strony, formatuje je tak jak nalerzy (chodzmi mi o entery ) wyszukuje login czyli fraze ktora mnie interesuje zapisuje do pliku pobiera plik z loginami dodaje do nich adres i odwiedza po odwiedzeniu usuwa login... Strona z loginami co jakis czas sie sama alktualizuje...

Hmm a moze by zorbic tak zeby wybieral losowe profile?

0

a propoS tego kodu to mam taki problem:

begin
Memo1.Lines.LoadFromFile('bza.RTF'); /// otwieram plik i laduje go do memo1
end;

var
i2 :integer;
begin
  for I:=0 to Memo1.Lines.Count-1 do begin
    WebBrowser1.Navigate(Memo1.Lines[i2]); // pobieramy adres z memo i idziemy do webbrowsera
  end;
end;

że jako adres nie bierze tylko jednej lini kodu tlyko kilka ;/

0
djaffect napisał(a)

Mysle jakby zrobic aby zaczynal od wpisu 1250.

Wystarczy pętle odpowiednio zaimplementować (czyli "for i:=1250 to ...").

1 użytkowników online, w tym zalogowanych: 0, gości: 1