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

Sign in to follow this  
n1ckooo

Receber Dados de um site

Recommended Posts

n1ckooo

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

Share this post


Link to post
Share on other sites
vasco16

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:)

Share this post


Link to post
Share on other sites
n1ckooo

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

Share this post


Link to post
Share on other sites
José Lopes

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


Quando te pedirem peixe.... ensina-os a Pescar!!Hum..lálálálá!!

Share this post


Link to post
Share on other sites
n1ckooo
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.

Share this post


Link to post
Share on other sites
n1ckooo

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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.