• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

n1ckooo

Receber Dados de um site

6 mensagens neste tópico

Olá a todos,

Estou a tentar criar um programa em vb6, que receba dados de web sites.

Mais concretamente quero que o programa aceda ao site http://www.zerozero.pt/edicao.php?id_edicao=2306&fase=15149&jornada_in=19 e consiga "copiar"  os dados da tabela de classificação,acham possível fazer isso?

Eu consegui através do programa, guarda o "código fonte"(html) num textbox, porque pensei que poderia conseguir os dados usando o split etc, MAS isso parece uma tarefa difícil, cansativa e com pouca logica (pelo menos da maneira que estava a pensar).

Pessoal se alguem souber como posso fazer isso, agradecia a ajuda abraço

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

nada melhor que ver o codigo fonte..

e selecionas tudo o que esta dentro das tags <table> ... </table> e tens ai a tabela que está no site com os resultados:)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

nada melhor que ver o codigo fonte..

e selecionas tudo o que esta dentro das tags <table> ... </table> e tens ai a tabela que está no site com os resultados:)

Pois, eu já consigo ver o código fonte até o tenho a mostrar numa textbox multiline, podia me dizer então qual é a função que me retorne o que está dentro das tags <table> ... </table>?

Problema 1:

É que existem varias tabelas no site, como consigo saber qual é a tabela classificação?

Problema 2:

Quero guardar os dados todos num base de dados para depois poder usar conforme necessite.

Problema 3:

Gostaria fazer este processo, em vários sites e como se sabe o código fonte difere entre eles, será possível automatizar isso vários sites?

Possível Solução : Não sei se é possível fazer isto, mas não era mais fácil procurar todas as tabelas usando o tratamento de strings e depois converter para xml? Será possível? Porque penso que é mais fácil tratar o dados que necessito, se estes estiverem em xml, não?

Agradeço opiniões, sugestões, links, tudo que possa ajudar, obrigado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Problema 1

- Só se a tabela tiver um ID

(Em alternativa podes tentar apanhá-la, por um elemento único embutido no html  que exista perto da tabela, ex: um título, o cabeçalho da 1ª coluna)...

Problema 2

Sim... tens que percorrer a tabela, determinar os dados... se quiseres ser muito expedito até podes determinar o tipo de dados e por aí fora... mas o mais fácil será mesmo apanhares os valores e criares isso num XML.

Aviso já que este processo pode dar bastante trabalho.. Depois tens que ver se a tabela é sempre a mesma, e/ou se os dados são sempre do mesmo tipo... se vais querer criar uma nova tabela cada vez que corres o processo, ou se queres fazer o update da que já existe.

Problema 3

Duvido muito.. pois porque tal como dizes....código fonte difere entre eles... como apanhar a tabela correcta em cada um dos sites...

Não digo que seja impossível... mas... meu amigo... Boa Sorte (bem precisas!)

A tua possível solução vai de acordo com as limitações e possibilidades que acabei de referir.... e tal como eu costumo dizer lá no meu trabalho... o VB.. só não frita batatas, porque não tem sitío onde colocar o óleo....

Tudo o resto é trabalho e imaginação

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Problema 1

- Só se a tabela tiver um ID

(Em alternativa podes tentar apanhá-la, por um elemento único embutido no html  que exista perto da tabela, ex: um título, o cabeçalho da 1ª coluna)...

Eu para o site do zero zero estou a utilizar, o titulo já consigui filtrar apenas a tabela da classificação

Problema 2

Sim... tens que percorrer a tabela, determinar os dados... se quiseres ser muito expedito até podes determinar o tipo de dados e por aí fora... mas o mais fácil será mesmo apanhares os valores e criares isso num XML.

Aviso já que este processo pode dar bastante trabalho.. Depois tens que ver se a tabela é sempre a mesma, e/ou se os dados são sempre do mesmo tipo... se vais querer criar uma nova tabela cada vez que corres o processo, ou se queres fazer o update da que já existe.

Vou começar a trabalhar sobre isso agora, o problema é que nao entendo muito de xml, nodes, mas estou a usei um componet da "chikat htmltoxml" mas como não quero usar coisas de outras e muito menos ter que pagar por um componente vou tentar "copiar/descobri" a rotina utilizada para passar o Html para xml.

Problema 3

Duvido muito.. pois porque tal como dizes....código fonte difere entre eles... como apanhar a tabela correcta em cada um dos sites...

Não digo que seja impossível... mas... meu amigo... Boa Sorte (bem precisas!)

A tua possível solução vai de acordo com as limitações e possibilidades que acabei de referir.... e tal como eu costumo dizer lá no meu trabalho... o VB.. só não frita batatas, porque não tem sitío onde colocar o óleo....

Eu já não duvido muito acho que vou conseguir, pelo menos vou tentar, daqui nada mostro o código que tenho.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O código a baixo é o que estou utilizar para guardar a string só com o Html das tabelas. Basicamente guarda desde "<table" a "</table>"

Public Function ExtractTables(str As String) As String
Dim StartPos, EndPos As Long 'variaveis para encontrar a posição
Dim strM, strF As String ' varias para guardar a strings
TableSplit = Chr(177) & Chr(177) 'vai ser o delimitador entre tabelas


StartPos = InStr(str, "<table") 'Encontra a 1ª palavra  string "</table, retorna a posição
EndPos = InStr(str, "</table") 'Encontra a 2ª palavra string  "</table, retorna a posição
nTables = 0 ' vai ser o numero de tabelas nao devo precisar
Do While (StartPos <> 0 And EndPos <> 0 And EndPos > StartPos) 'repete Enquando esta condiçao for verdadeira.
nTables = nTables + 1 'Aumenta sempre que pass aqui(nao é necessario)
strM = Mid(str, StartPos, EndPos - StartPos + 8) ' Guarda desde <table até </table>
strF = strF + strM + TableSplit 'guarda a sting e acrecenta o tablesplit
str = Replace(str, strM, "") ' substitui string da onde foi guarda a tabela por espaços em branco
StartPos = InStr(str, "<table") 'Encontra a posiçao da proxima tabela
EndPos = InStr(str, "</table") 'Encontra a posiçao da proxima tabela

Loop

FindTable LCase(strF) 'Passo a string que contem todas as tabelas para a função FindTable 
End Function

O próximo bloco de código, divide a string de todas as tabelas, copiando para um vector/array do tipo string, ficando cada uma tabela, em cada posiçao do vector/array. Depois tem o ciclo que procura a palavra classificação(neste caso), e onde encontrar é a tabela que me interessa. Agora tenho que fazer o codigo para converter para xml, de modo a poder usar esses valor conforme necessite. Nota: este código não está perfeito, é apenas para testar no site zero zero.

Public Function FindTable(str As String) As String
Dim StrSplitTable() As String

Dim i, TableN, count, c As Integer
Dim StrSearch As String
count = 0
StrSplitTable = Split(str, TableSplit)

StrSearch = LCase("Classificação")
For i = 0 To UBound(StrSplitTable)

TableN = InStr(StrSplitTable(i), StrSearch)
If (TableN > 0) Then
count = count + 1
c = i
End If
Next
If (count = 1) Then
StrTableHtml = StrSplitTable(c)
End If
End Function

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora