Websites schnell auslesen

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
D@nte
Beiträge: 324
Registriert: 24.04.2007 15:33
Wohnort: Berlin

Websites schnell auslesen

Beitrag von D@nte »

Ich möchte Daten aus einer website auslesen, das ganze ist prinzipiell so aufgebaut wie ein forum sprich <URL><ID_des_Datensatzes>, hier tun sich dann mehrere Probleme auf:
I. ich weiß nicht welche ID ein realer Datensatz ist sprich http://www.pwdatabase.com/my/mine/15172 wäre ein realer Datensatz wobei http://www.pwdatabase.com/my/mine/15173 wiederum keiner ist
II. Bräuchte ich mit meinem Ansatz über's WebGadgets ~17 Tage um alle 50k IDs ab zu fragen
Prinzipiell brauch ich nur den Titel der Wenbsite, da dort alle für mich relevanten Daten stehen, sprich Name des Gegenstands, nur irgendwie finde ich keinen Ansatz mit dem ich das ganze in einer angemessenen Zeit durchführen kann...

Code: Alles auswählen

Enumeration
  #Window_0
EndEnumeration

Enumeration
  #File
  #Web_0
EndEnumeration

url.s = "http://www.pwdatabase.com/my/mine/"
string.s = "Perfect World Recource Database"
start = 1
ende  = 1000


If OpenWindow(#Window_0, 0, 0, 600, 300, "HTML-Parser", #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_Invisible)
  If CreateGadgetList(WindowID(#Window_0))
    WebGadget(#Web_0, 10, 10, 580, 280, url)
  EndIf

  pos = start - 1

  If CreateFile(#File, "C:\mines.txt")
    Repeat
      pos + 1
      SetGadgetText(#Web_0, url + Str(pos))
      While GetGadgetAttribute(#Web_0, #PB_Web_Busy)
        WindowEvent()
      Wend
      title.s = GetGadgetItemText(#Web_0, #PB_Web_PageTitle)
      WriteStringN(#File, "MineID :: " + Str(pos) + " // " + RemoveString(title, string))
    Until pos = ende
    CloseFile(#File)
  EndIf

  Debug "DONE"

EndIf

End
Irgendwer ne Idee?! -.-
Benutzeravatar
KeyKon
Beiträge: 1412
Registriert: 10.09.2004 20:51
Computerausstattung: Laptop: i5 2,8 Ghz, 16GB DDR3 RAM, GeForce 555GT 2GB VRAM
PC: i7 4,3 Ghz, 32GB DDR3 RAM, GeForce 680 GTX 4GB VRAM
Win10 x64 Home/Prof
PB 5.30 (64bit)
Wohnort: Ansbach
Kontaktdaten:

Beitrag von KeyKon »

Wiso Webgadget? Lad doch einfach die Site runter und Parse sie nach Titel, oder was dir wichtig is?

Mit diesen Befehlen sollte das eigentlich hinhauen:
ReceiveHTTPFile() -> ReadFile() -> FindString(),Mid()
(\/) (°,,,°) (\/)
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

1. Genau. ReceiveHTTPFile() ist schneller.

2. Du widersprichst dir. Du redest von 50.000 IDs, rufst aber nur die ersten 1.000 IDs ab. Was denn nun?

3. Das Extrahieren von Informationen dürfte mit Regulären Ausdrücken sicherlich am besten hinhauen, aber ich persönlich verstehe nicht so ganz, wie das Format lautet, in dem die Informationen 'aufgebaut' sind.
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
D@nte
Beiträge: 324
Registriert: 24.04.2007 15:33
Wohnort: Berlin

Beitrag von D@nte »

Funktioniert wunderbar statt 16 Tagen nur 13h...

Webgadget weil mir nix anderes eingefallen ist.

Und es sind 50k URLs die angesprungen werden müssen hatte ich zum testen nur auf 1k gesetzt, wobei hier zusätzlich das Problem auftrat das nur max 9 Einträge in der Datei mines.txt erzeugt wurden...

@AND51
Format?! Was bitte? Also imo nennt sich das Format PHP ;p
Von welchen 'Format' sprichst du bitte genau?!
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

Du gehst direkt zu den eintraegen, parse lieber erst die listen durch, dann
hast du auch nur gueltige Eintraege. und lade direkt herunter, nicht im
WebGadget.
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

Ich meine mit Format, in welcher Form deine Daten vorliegen. Dann könnte man dir einen Regulären Ausdruck erstellen, mit dem du dir Information von einer Seite noch leichter als mit FindString und Mid auslesen kannst.
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Antworten