1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

VBnet - Buscar Area especifica a um site

Discussão em 'Programação' iniciada por viskonde, 7 de Maio de 2008. (Respostas: 9; Visualizações: 1456)

  1. viskonde

    viskonde I quit My Job for Folding

    Boas

    em VB.net, queria saber se é possivel o seguinte:

    dado um determinado site ( http://www.imdb.com/title/tt0086190/ por exemplo) obter certos dados especificos do site.

    Na pratica, queria a partir de um link do IMDB, ir buscar automaticamente a imagem/link da imagem que está à esquerda (a que tem a cover do filme) sem ter de dizer o link à mão.

    e possível ?

    e se fosse para obter texto ?

    tipo a partir do link da pagina ele ir buscar o nome do produtor, e a duração do filme?


    Cumpts
     
    Última edição: 7 de Maio de 2008
  2. SoundSurfer

    SoundSurfer Power Member

    Podes começar por aqui: System.Net.WebRequest

    Usando esta classe podes fazes um pedido à página e é-te devolvido todo o seu HTML. Depois disso só tens de percorrer de alguma forma todo o HTML devolvido e identificar o url da imagem para fazer um novo pedido desse url.
     
  3. K0mA

    K0mA Power Member

    Interessante!

    há algum site/livro com mais informação acerca disto? isto é, interacção vb.net com websites / mostrar webpage num form etc...

    Algum tutorial para se começar do zero?
    Alguma dica sobre o que pesquisar para além do que o SoundSurfer disse?
     
  4. p3dro

    p3dro Power Member

    TRYNT Movie IMDB Web Service (v2)
     
  5. spastikman

    spastikman Banido

    basicamente é fazer o que o soundsurfer disse, ou utilizar directamente a class webclient.

    Para tratamento do html, é usar expressões regulares.
     
  6. SoundSurfer

    SoundSurfer Power Member

    Para mostrares páginas web num form existe o control WebBrowser
     
  7. K0mA

    K0mA Power Member

    E recomendam algum livro para aprender a trabalhar especificamente com estas classes?
    Não me sinto à vontade para aprender só com a informação microsoft convinha que fosse um livro!
     
  8. p3dro

    p3dro Power Member

    Achei curioso e fiz um pequeno código para exemplificar.

    Percebo pouco de expressões regulares, só mesmo as mais simples, para este exemplo construi uma que (muito) provavelmente é pouco ou nada eficiente :joker:



    PHP:
    Imports System.Net
    Imports System
    .IO
    Imports System
    .Text
    Partial 
    Class _Default
        Inherits System
    .Web.UI.Page

        
    Protected Sub Page_Load(ByVal sender As ObjectByVal e As System.EventArgsHandles Me.Load
            Dim pedido 
    As WebRequest WebRequest.Create("http://www.imdb.com/title/tt0299977/")
            
    Dim resposta As HttpWebResponse CType(pedido.GetResponse(), HttpWebResponse)
            
    Dim dataStream As Stream resposta.GetResponseStream()
            
    Dim reader As New StreamReader(dataStream)
            
    Dim html As String reader.ReadToEnd()

            
    Dim rgx_pattern As String "<title>(?<titulo>.+)<\/title>|" _
            
    "<div class=""photo"">\s*<a[^>]*>(?<imagem>.+)\s*<\/a>\s*<\/div>|" _
            
    "<div class=""info"">\s*<h5>Director:<\/h5>\s*<a[^>]*>\s*(?<director>.+)\s*<\/a>|" _
            
    "<div class=""info"">\s*<h5>Language:<\/h5>\s*<a[^>]*>\s*(?<lang>.+)\s*<\/a>"
            
    Dim rgx As Regex = New Regex(rgx_patternRegexOptions.IgnoreCase)

            
    Dim matches As MatchCollection rgx.Matches(html)

            
    Dim values(4) As String
            Dim i 
    As Int16 0
            
    For Each match As Match In matches
                i 
    1
                
    If match.Success Then
                    values
    (1) = match.Groups(i).ToString()
                
    End If
            
    Next

            Response
    .Write(String.Format("Titulo<br/>{0}<br/>Imagem<br/>{1}<br/><br/>Realizador<br/>{2}<br/>Idioma<br/>{3}"values))

        
    End Sub
    End 
    Class
    Vai escrever para o output esta informação:

    Código:
    Titulo<br/>
    Ying xiong (2002)<br/>
    Imagem<br/>
    <img border="0" alt="Ying xiong" title="Ying xiong" src="http://ia.media-imdb.com/images/M/MV5BMTk5NjQyMzIwM15BMl5BanBnXkFtZTcwODQyNjYyMQ@@._V1._SY140_SX100_.jpg" /<br/><br/>
    Realizador<br/>
    Yimou Zhang<br/>
    Idioma<br/>
    Mandarin
    A informação pode não ser totalmente correcta, se por ex. existir mais que um idioma, só aparece o 1º, mas para quem perceba em expressões regulares isto deve ser "fácil".

    Para "apanhar" a fotografia do filme nem era preciso aquilo, por ex. quando há um poster do filme aparece dentro do anchor <a name="poster" ...><img ....../></a>, mas quando não há um poster isto já não se verifica, se por ex. inserirmos um filme sem poster (http://www.imdb.com/title/tt0293715/) vai devolver isto:

    Código:
    Titulo<br/>
    Yeopgijeogin geunyeo (2001)<br/>
    Imagem<br/>
    <img border="0" src="http://ia.media-imdb.com/media/imdb/01/I/37/58/83/10.gif" width="100" height="150" alt="Poster Not Submitted" title="Poster Not Submitted"><br/><br/>
    Realizador<br/>
    Jae-young Kwak<br/>
    Idioma<br/>
    Korean
    Aqui falha no idioma, pois no imdb tem "Korean | English"

    Além de que se por ex. os programadores do imdb decidirem mudar a estrutura isto vai deixar de funcionar :D

    Do pouco que sei, espero ter ajudado.
     
  9. viskonde

    viskonde I quit My Job for Folding

    hi
    Código:
    [COLOR=#000000][COLOR=#dd0000]"<div class=""photo"">\s*<a[^>]*>(?<imagem>.+)\s*<\/a>\s*<\/div>|" [/COLOR][/COLOR]"
    sera que podias fazer uma alteracao nesta parte expressao regular na parte da imagem, para em vez de sair a tag <img> toda , sair apenas o link (src)?
    nao tenho muito jeito para Regexs..

    de resto ta tudo a funcionar bem :D era mesmo isso que precisava

    ja agora, para que serve esta parte da Regex:

    (?<imagem>.+)
    ?

    edit:
    bem depois de olhar para isto parece que consegui
    bastou meter mudar a linha para isto
    Código:
     & "<div class=""photo"">\s*<a[^>]*>\s*<img[^>]*src=(?<imagem>.+)\s*\/><\/a>\s*<\/div>|" _
     
    Última edição: 12 de Maio de 2008
  10. p3dro

    p3dro Power Member

    Acho que o (?<imagem>.+) é um groupname, permite-te que depois possas chamar por ex. rgx.Match(html).Groups("imagem")

    Sim, acho que dessa maneira consegues ir buscar o src, pelo menos teoricamente pois n experimentei :), só acho que vai buscar o src incluindo as ""


    Eu também percebo pouco de expressões regulares, tenho de começar a dar mais atenção :D
     

Partilhar esta Página