Wubbable Skrevet 20. mars 2007 Del Skrevet 20. mars 2007 Som sagt, jeg loader en webside, søker etter et spesifikkt table, og vil sette hver linje inn i en listbox... Er dette mulig? Godtar eksterne DLL filer Lenke til kommentar
wolf5 Skrevet 23. mars 2007 Del Skrevet 23. mars 2007 (endret) Regular Expressions http://www.c-sharpcorner.com/UploadFile/pr.../RegExpPSD.aspx http://regexlib.com/ http://www.regular-expressions.info/ http://en.wikipedia.org/wiki/Regular_expression Benytter deg av et uttrykk til å trekke ut elementer i en text. Web siden er en lang tekst hvor du ved å bruke rett uttrykk kan få en array av hvert element i tabellen. Dette kan være enkelt og det kan være svært komplisert. Alternativ måte er å bruke .IndexOf og .Substring hele veien til å hente alt du er på jakt etter. Endret 23. mars 2007 av wolf5 Lenke til kommentar
Manfred Skrevet 23. mars 2007 Del Skrevet 23. mars 2007 Alternativ måte er å bruke .IndexOf og .Substring hele veien til å hente alt du er på jakt etter. 8221414[/snapback] Dog er dette skikkelig grisete. hehe Men det kommer litt an på hvordan Den siden du skal hente fra er bygget opp. Om det i det hele tatt er greit å sette opp et uttrykk for å matche det du skal hente ut, eller om dette er nesten umulig. I visse tilfeller kan faktisk IndexOf og Substring være det beste. Eller enda enklere: Få et API av de som eier siden. De er nok ikke så glad for at du henter informasjon slik! Lenke til kommentar
aadnk Skrevet 23. mars 2007 Del Skrevet 23. mars 2007 (endret) Alternativ måte er å bruke .IndexOf og .Substring hele veien til å hente alt du er på jakt etter. 8221414[/snapback] Ikke gjør dette dersom du skal hente mye informasjon. I min spede barndom som programmerer, før jeg visste noe om DOM eller SAX, gjorde jeg nettopp dette for å parse innholdet en nettside. Resultatet ble kode jeg vil si er verdig en WorseThanFailure-artikkel: Klikk for å se/fjerne innholdet nedenfor Public Sub GetHitlist() ' *** START ERROR HANDLER *** On Error GoTo errHandler If Err.Number <> 0 Then errHandler: ErrorIn "GetHitlist()", Array(), EA_NORERAISE: HandleError: Exit Sub End If ' *** BEGIN CODE *** On Error Resume Next Dim C&, A&, B&, D(1) As Long, E&, Tmp& Dim Txt$, Tell&, Arr HitList.ListItems.Clear HitList.Visible = True HitList.Sorted = False AttackList.Visible = False StopAttacking = True AllStop = False Tell = -1 C = 0 StatusBar1.Panels(1).Text = "Downloading hitlist...": DoEvents DownloadFile Winsock1, "hitlist.php" E = InStr(1, MainBuff, "Remove</b></td>") If E <= 0 Then MsgBox "You are not in any crew!", vbCritical, "Error": StatusBar1.Panels(1).Text = "Not in any crew": Exit Sub A = InStr(E + 1, MainBuff, "<tr>") If A <= 0 Then MsgBox "Something went wrong! Please try again later", vbCritical, "Error in finding table": Exit Sub StatusBar1.Panels(1).Text = "Analyzing hitlist...": DoEvents If MainBuff <> "" Then Arr = Split(Mid(MainBuff, A), "<td") MainBuff = "" For B = LBound(Arr) + 1 To UBound(Arr) D(0) = InStr(1, Arr(B), ">") + 1 D(1) = InStr(D(0), Arr(B), "</td>") Txt = Mid(Arr(B), D(0), D(1) - D(0)) If C = 0 Then HitList.ListItems.Add , , GetLinkName(Txt) HitList.ListItems.Item(HitList.ListItems.count).Tag = strProfile & GetstrOutwarLink(Txt) Tell = Tell + 1 End If If C = 3 Then Txt = Val(GetLinkName(Txt)) If C = 4 Then Txt = GetLinkName(Txt) If C > 0 And C < 5 Then If C = 1 Then Tmp = 0 If InStr(1, UCase(Txt), "#00FFFF") <> 0 Then Tmp = 1 If InStr(1, UCase(Txt), "#00FF00") <> 0 Then Tmp = 2 HitList.ListItems.Item(HitList.ListItems.count).SmallIcon = Tmp + 1 Tmp = InStr(1, Txt, ">") + 1 Txt = Mid(Txt, Tmp, InStrRev(Txt, "</font>") - Tmp) End If HitList.ListItems.Item(HitList.ListItems.count).SubItems© = Txt End If C = C + 1 If C > 5 Then C = 0 Next End If StatusBar1.Panels(1).Text = "Finished downloading hitlist" End Sub Tilsvarende kode for alle sider og funksjoner var spredt utover hele prosjektet, med størst konsentrasjon i hovedformen (hvilket i seg selv utgjorde 86 kiB med kode). Jeg får frysninger bare med tanken på å refactorere koden. Endret 23. mars 2007 av aadnk Lenke til kommentar
Wubbable Skrevet 24. mars 2007 Forfatter Del Skrevet 24. mars 2007 Ja, ble til indexof og substrings ^^ Lenke til kommentar
wolf5 Skrevet 24. mars 2007 Del Skrevet 24. mars 2007 Alternativ er XML(DOM). Men en html side er vanligvis ikke XML kompatibel da mange HTML tagger ikke krever avsluttende tagger. Det finnes biblioteker som kan transformere en HTML side til å følge XML standard. Dermed kan du bruke XmlDocument objektet til å lese inn siden. Og om du kan XML så vet du at XML er trestruktur basert, så da kan du bare gå nedover i treet til du finner rett node (tabellen) og lese alle barnenodene (radene). Her er en link til en artikkel på TidyHTML som kan gjøre transformeringen: http://www.devx.com/dotnet/Article/20505/0/page/1 Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå