Título: Obtener datos de la sbs
Publicado por: dany22_ en 3 Julio 2015, 16:12 pm
Estimados amigos muy buenos dias, quisiera que por favor me ayuden a que este codigo funcione. Lo que pretendo es extraer datos de esta pagina de la sbs. http://www.sbs.gob.pe/app/spp/Afiliados/afil_detalle.asp?tp=2&tip_doc=00&num_doc=00000000 (http://www.sbs.gob.pe/app/spp/Afiliados/afil_detalle.asp?tp=2&tip_doc=00&num_doc=00000000) Imports System.Collections.Generic
Imports System.Linq Imports System.Net Imports HtmlAgilityPack Imports System.Text.RegularExpressions Imports System.IO Imports System.Web Public Class Form2 Sub obtener() Try Dim document As HtmlAgilityPack.HtmlDocument = New HtmlAgilityPack.HtmlDocument() document.LoadHtml("http://www.sbs.gob.pe/app/spp/Afiliados/afil_detalle.asp?tp=2&tip_doc=00&num_doc=00000000") Dim NodesTr As HtmlAgilityPack.HtmlNodeCollection = document.DocumentNode.SelectNodes("//table[@id='TblDetalle']//tr") If NodesTr IsNot Nothing Then Dim dt As New DataTable() dt.Columns.Add("DATO1", GetType(String)) dt.Columns.Add("DATO2", GetType(String))
Dim iNumFila As Integer = 0 For Each Node As HtmlNode In NodesTr If iNumFila > 0 Then Dim iNumColumna As Integer = 0 Dim dr As DataRow = dt.NewRow() For Each subNode As HtmlNode In Node.Elements("td") If (iNumColumna = 0) Then dr = dt.NewRow() Dim sValue As String = subNode.InnerHtml.ToString().Trim() sValue = System.Text.RegularExpressions.Regex.Replace(sValue, "<.*?>", " ") dr(iNumColumna) = sValue iNumColumna += 1 If iNumColumna = 2 Then '3 dt.Rows.Add(dr) iNumColumna = 0 End If Next End If iNumFila += 1 Next dt.AcceptChanges() Me.dgvHtml.DataSource = dt Me.dgvHtml.ReadOnly = True Me.dgvHtml.Columns(0).HeaderText = "DATO1" Me.dgvHtml.Columns(1).HeaderText = "DATO2" End If
Catch ex As Exception MessageBox.Show(ex.Message, Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Error) End Try End Sub End Class
Título: Re: Obtener datos de la sbs
Publicado por: Spectatorem en 3 Julio 2015, 16:24 pm
Que problemas tienes actualmente?
Título: Re: Obtener datos de la sbs
Publicado por: dany22_ en 3 Julio 2015, 16:27 pm
No consigo obtener el codigo fuente de la pagina en mension. Reemplazando el 00000000 por un numero de dni valido me deberia arrojar los datos del afiliado y ese codigo es que deberia obtener pero nada
Título: Re: Obtener datos de la sbs
Publicado por: Spectatorem en 3 Julio 2015, 16:40 pm
Yo creo que primero debes mandar la peticion, el resultado de la peticion colocar en tu objeto HtmlAgilityPack y ahí recien procesar lo que quieres.
Título: Re: Obtener datos de la sbs
Publicado por: dany22_ en 3 Julio 2015, 16:43 pm
No entiendo muy bien lo que quieres decir, lo que pasa es que no se mucho sobre esto de hecho este codigo es un ejemplo que obtuve buscando en internet.
Título: Re: Obtener datos de la sbs
Publicado por: Spectatorem en 3 Julio 2015, 16:45 pm
No entiendo muy bien lo que quieres decir, lo que pasa es que no se mucho sobre esto de hecho este codigo es un ejemplo que obtuve buscando en internet.
Que antes de procesar un html, debes tenerlo mediante una peticion mira esta clase http://htmlagilitypack.codeplex.com/SourceControl/latest#Branches/2.0.Experimental/HtmlAgilityPack/HtmlWeb.cs
Título: Re: Obtener datos de la sbs
Publicado por: dany22_ en 3 Julio 2015, 16:59 pm
Ok le voy a dar una revisada y te aviso si consegui algo
Título: Re: Obtener datos de la sbs
Publicado por: Spectatorem en 3 Julio 2015, 17:01 pm
Ok le voy a dar una revisada y te aviso si consegui algo
Perfecto.
Título: Re: Obtener datos de la sbs
Publicado por: dany22_ en 3 Julio 2015, 17:03 pm
tambien tengo este codigo quizas es a lo que te refieres Imports System.Collections.Generic Imports System.Linq Imports System.Net Imports HtmlAgilityPack Imports System.Text.RegularExpressions Imports System.IO Imports System.Web Public Class Form2 Dim doc2 As New HtmlAgilityPack.HtmlDocument() Dim wc As New WebClient Dim regexTrim As New Regex("\s\s", RegexOptions.Compiled) Private bConsultado As Boolean = False Private bResultado As Boolean = False Private sHtml As String = "" Private periodo As String = ""
Public Function Consultar(ByVal dni As String) As resultados Dim elemento As HtmlNode Dim tablaStr As String x: Dim bytes As Byte() bytes = wc.DownloadData("http://www.sbs.gob.pe/app/spp/Afiliados/afil_detalle.asp?tp=2&tip_doc=00&num_doc=" & dni) Using sr As New StreamReader(New MemoryStream(bytes)) doc2.LoadHtml(HttpUtility.HtmlDecode(sr.ReadToEnd())) End Using elemento = doc2.DocumentNode.SelectSingleNode("//html") If elemento Is Nothing Then GoTo x End If ' posible bucle infinito tablaStr = elemento.InnerHtml MsgBox(tablaStr) ' posible bucle infinito (poco probable) Dim result As New resultados() If tablaStr.Contains("Documento de Identidad no registrado en el SPP.") Then result.Estado = resultados.RucState.NoExiste Return result End If
' nombre comercial result.EstadoContribuyente = ObtenerContenido(elemento, "Apellido Paterno") ' estado del contribuyente result.CondiciónContribuyente = ObtenerContenido(elemento, "Primer Nombre") ' condición del contribuyente result.Dirección = ObtenerContenido(elemento, " Fecha Nacimiento") ' dirección Return result End Function Private Function ObtenerContenido(tabla As HtmlNode, index As String) As String Dim elemento As HtmlNode = Nothing
For Each e As HtmlNode In tabla.ChildNodes If Not String.IsNullOrEmpty(e.InnerText) AndAlso e.InnerText.Contains(index) Then elemento = e Exit For End If Next
If elemento Is Nothing OrElse elemento.ChildNodes.Count = 0 Then Return String.Empty End If Return TrimAll(elemento.ChildNodes(3).InnerText) End Function Private Function TrimAll(str As String) As String While regexTrim.IsMatch(str) str = regexTrim.Replace(str, " ") End While
Return str.Trim() End Function Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load Dim result As resultados = Consultar("06454380")
Select Case result.Estado Case resultados.RucState.NoExiste MessageBox.Show("El RUC no existe.") Case resultados.RucState.Normal TextBox1.Text = "Número de RUC: " & result.RUC & vbNewLine & "Tipo Contribuyente: " & result.TipoContribuyente & vbNewLine & "Tipo de Documento: " & result.TipoDocumento End Select
End Sub End Class Public Class resultados
Public Estado As RucState Public RUC As String Public TipoContribuyente As String Public TipoDocumento As String Public NombreComercial As String Public EstadoContribuyente As String Public CondiciónContribuyente As String Public Dirección As String
Public Enum RucState Normal NoExiste End Enum End Class
Título: Re: Obtener datos de la sbs
Publicado por: Spectatorem en 3 Julio 2015, 17:15 pm
Ese me hace mas sentido, no te funciona ese?
Título: Re: Obtener datos de la sbs
Publicado por: dany22_ en 3 Julio 2015, 17:18 pm
igual no me retorna el codigo que deberia al parecer la pagina en ciertas ocasiones da un codigo y enotras otro y el codigo que traigo con ,net me trae el codigo que no necesito
|