Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: extreme69 en 22 Febrero 2011, 04:56 am



Título: Separar partes de un un html code
Publicado por: extreme69 en 22 Febrero 2011, 04:56 am
A ver, tengo un archivo .html inmenso y necesito sacar cierta información dentro de unos tags.

Tengo que sacar del .html todo lo que esté entre medio de
Citar
<a href="

hasta
Citar
"><img class=

Esta sería parte del código:
Citar
<a href="xfire:add_friend?user=mrdogbertt"><img class=

Y esto lo que necesito obtener:

Citar
xfire:add_friend?user=mrdogbertt

Estoy usando este código:

Citar
      Private Function ExtractInfo(ByVal strstring As String, ByVal starttag As String, ByVal endtag As String) As String
      ExtractInfo = Mid(strstring, Len(starttag) + 1, Len(strstring) - Len(endtag) - Len(starttag))
      End Function


      Private Sub Command1_Click()
      MsgBox ExtractInfo(Text1.Text, "<a href", "><img class")
      End Sub

Pero no me funciona en lo más mínimo, me corta partes del código que nada que ver, y aparte hay muchos de estos en el mismo html, y me obtendría sólo 1 o todos juntos, y yo necesito obtenerlos 1 por 1

Ideas? sugerencias? ejemplos? soluciones? ayuda? algo?



Título: Re: Separar partes de un un html code
Publicado por: Elemental Code en 22 Febrero 2011, 05:11 am
Quiero que busques en este foro con muuucho cuidado, Mr.Frog tiene unos codigos para manipular codigo html.
Con uno lo obtenes y con otro lo limpia o algo asi.

Buscalo  ;D

son las 01:11 de la matina, me voy a hacer noni :P


Título: Re: Separar partes de un un html code
Publicado por: ignorantev1.1 en 22 Febrero 2011, 05:32 am
Código
  1. Function getXfire(ByVal tStr As String) As String
  2.    Dim i As String
  3.    Dim f As String
  4.    tStr = LCase(tStr)
  5.    i = InStr(tStr, "<a href=")
  6.    f = InStr(tStr, "<img class")
  7.    If i = 0 Or f = 0 Then getXfire = "No hay!": Exit Function
  8.    getXfire = Mid(tStr, i + 9, f - i - 11)
  9. End Function
  10.  

checalo


Título: Re: Separar partes de un un html code
Publicado por: yalosabes en 22 Febrero 2011, 05:59 am
ahmm ..spero q t sirva ste codigo
Código
  1. Private Sub ListarUrl()
  2.  
  3. Dim i As Integer
  4.  
  5.       List1.Clear
  6.        For i = 0 To wb1.Document.links.length - 1
  7.          List1.AddItem wb1.Document.links.Item(i)
  8.          List2.AddItem wb1.Document.All.tags("a").Item(i).innerText
  9.       Next
  10. End Sub
  11.  
donde dice "a" puedes poner "td"  "img" "div" .. o lo que kieras...

en el ejemplo estoy sakando el texto con su respectiva url.. en los list distintos


Título: Re: Separar partes de un un html code
Publicado por: extreme69 en 22 Febrero 2011, 07:23 am
Bueno, funcionar funciona... con el código de ignorantev1.1... pero me toma únicamente la primera y me corta el resto del código donde se encuentran los otros links que quiero obtener.

Tengo el código html en un textbox, y estoy llamando a la función de esta manera:

call getXfire(Text1.Text)

Hay alguna manera de que no me corte el texto en Text1 sino que lo mande a otro textbox?


Agrego: Lo hice de una manera menos "elite", a puro sendkeys, tabs y enters, jajajaj, pero para mi sorpresa funciona y funciona excelente.

Gracias a todos por la ayuda!!! si alguien tiene el mismo objetivo que yo me dicen y les paso el source.

Saludos.-


Título: Re: Separar partes de un un html code
Publicado por: Psyke1 en 22 Febrero 2011, 09:07 am
Dios mio... SendKeys() para este tipo de cosas no por favor. :-(
Te dejo aquí una funcion para sacar el texto entre dos palabras, para esto creo que te funcionará, sino otra opción será usar RegExp.

Código:
Código
  1. 'by Mr.Frog™
  2. Public Function TextBetweenWords(ByRef strText$, ByRef strWord1$, ByRef strWord2$) As String
  3. Dim lngPos1&, lngPos2&, lngStart&
  4.  
  5.    lngPos1 = InStr(strText, strWord1)
  6.    If lngPos1 Then
  7.        lngStart = lngPos1 + LenB(strWord1) \ 2
  8.        lngPos2 = InStr(lngStart, strText, strWord2)
  9.        If iPosition2 Then
  10.            TextBetweenWords = Mid$(strText, lngStart, lngPos2 - lngStart)
  11.        End If
  12.    End If
  13. End Function

Ejemplo:
Código
  1. Private Sub Form_Load()
  2.    Msgbox TextBetweenWords("<a href=""xfire:add_friend?user=mrdogbertt""><img class=", "<a href=""", """><img class=")
  3. End Sub

Resultado:
Código:
xfire:add_friend?user=mrdogbertt

No tengo el vb ahora, pero debería funcionar. :rolleyes:

DoEvents! :P


Título: Re: Separar partes de un un html code
Publicado por: extreme69 en 22 Febrero 2011, 09:34 am
jajajajaja  ;D

Si, ya sé soy un cochino... quedó un poco bugueado con sendkeys, tabs y enters, pero bueno, el 90% de los links los carga sin problemas. Incluso agregué botones para loguear y desloguear  :silbar:

El problema es que tengo el código html cargado en un textbox, pero el resultado debería ir a otro textbox y como si fuese poco hay muchos links, no sólo 1, debería tomar 1x1, ir poniendolos en el otro textbox (el de la url) e ir visitando cada link extraído, y la verdad no se me ocurrió el como.

Para que tengas una idea de lo que hice...

http://www.xfire.com/communities/dignitas/roster/

Si estás logueado al entrar a ese link vas a ver que cada usuario debajo tiene un "+" para agregarlo como amigo.


Título: Re: Separar partes de un un html code
Publicado por: Psyke1 en 22 Febrero 2011, 13:27 pm
Te dejo un ejemplo con RegExp que te saca todas las coincidencias. :)
No quedaría mejor cargar la info en un ListBox en vez de un TextBox?? :silbar:

Código
  1. 'by Mr.Frog™
  2. Public Function GetXFireText(ByRef strText$) As String()
  3. Dim objMatches As Object, objRegExp As Object
  4. Dim strTmp$(), lngTotal&, Q&
  5.  
  6.    Set objRegExp = CreateObject("VBScript.RegExp")
  7.  
  8.    With objRegExp
  9.        .Pattern = "\<a href\=""(\S+)""\>\<img class\="
  10.        .Global = True
  11.        .IgnoreCase = True
  12.    End With
  13.  
  14.    Set objMatches = objRegExp.Execute(strText)
  15.  
  16.    lngTotal = objMatches.Count - 1
  17.  
  18.    If lngTotal > -1 Then
  19.        ReDim strTmp$(lngTotal)
  20.  
  21.        For Q = 0 To lngTotal
  22.            strTmp(Q) = objMatches(Q).SubMatches(0)
  23.        Next Q
  24.  
  25.        GetXFireText = strTmp
  26.    End If
  27.  
  28.    Set objRegExp = Nothing
  29. End Function

Ejemplo:
Código
  1. Private Sub Form_Load()
  2.    Text1.Text = "<a href=""xfire:add_friend?user=mrdogbertt""><img class=" '// Text1 -> contenido html
  3.    Text2.Text = Join$(GetXFireText(Text1.Text), vbCrLf)                    '// Text2 -> textbox destino
  4. End Sub

DoEvents! :P


Título: Re: Separar partes de un un html code
Publicado por: ignorantev1.1 en 22 Febrero 2011, 16:51 pm
Código
  1. Function getXfire(ByVal tStr As String, ByVal fPar As String, ByVal lPar As String) As String
  2.    Dim i As Long
  3.    Dim f As Long
  4.    Dim isValid As Boolean
  5.    tStr = Replace(LCase(tStr), vbCrLf, "")
  6.    tStr = Replace(tStr, vbTab, "")
  7.    i = InStr(tStr, fPar)
  8.    f = InStr(i + Len(fPar) + 1, tStr, Chr$(34))
  9.    While i > 0 And f > 0
  10.        If Mid(tStr, f + 2, Len(lPar)) = lPar Then
  11.            getXfire = getXfire & Mid(tStr, i + Len(fPar) + 1, f - i - Len(fPar) - 1)
  12.            isValid = True
  13.        End If
  14.        i = InStr(f + 1, tStr, fPar)
  15.        f = InStr(i + Len(fPar) + 1, tStr, Chr$(34))
  16.        If i > 0 And f > 0 And isValid Then getXfire = getXfire & vbCrLf
  17.        isValid = False
  18.    Wend
  19. End Function
  20.  
  21. Private Sub Command1_Click()
  22.    Text2 = getXfire(Text1, "<a href=", "<img") '--> Lo que este en "<a href=" lo guardara sin comillas, siempre y cuando este junto a una etiqueta "<img"
  23. End Sub
  24.  

A ver que tal este  :D