Gå til innhold

Lese et html table og sette inn hver linje i liste


Anbefalte innlegg

Videoannonse
Annonse

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 av wolf5
Lenke til kommentar
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
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 av aadnk
Lenke til kommentar

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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...