none
Crawler para web profunda. RRS feed

  • Pergunta

  • Olá pessoal,
    Estou desenvolvendo um web crawler e preciso crawlear respostas de buscas.

    Sei que não é um trabalho trivial, porém já estou com um certo adiantamento, visto que eu já consigo pegar resultados de buscas feitas em formulários de algumas linguagens, como PHP.

    O lance é o seguinte. Como sabemos, os formulários Web Forms do Asp.Net tem muitos campos dele próprio, como viewstate e outras coisas mais. Para um formulário PHP eu pego os dados e apenas dou um request via POST com os dados corretos. A página de retorno já vem com os dados corretos.

    Para o Asp.Net não está funcionando. Acredito que isso se deva por estes outros campos escondidos que o Asp.Net tem. Não sei qual deles passar e como fazer com que a requisição saiba qual método do code behind executar.

    Alguém tem tal informação? Alguém já testou algo do tipo?

    Muito obrigado desde já.

    Abs. 

    Danilo Fernandes - Favor marcar como útil esta resposta caso ela tenha te ajudado.
    quarta-feira, 31 de agosto de 2011 14:14

Respostas

  • Boa tarde Danilo, pelo que entendi você precisa visitar uma página e coletar informações sobre ela? algo assim?

    Se for isso mesmo, eu postei há algum tempo atrás aqui no fórum em uma thread semelhante, o  post foi esse aqui:

    ----------------------------------------------------------------------------------------------------------------

    "Bom dia amigo, recentemente crie um projeto em C# bem parecido com isso que você precisa, no meu caso eu crie uma aplicação em console que visitava uma série de páginas Web e coletava os dados determinadas regiões das páginas gravando o resultado no banco para que fossem consumidos por uma página web que criei posteriormente.

    Imagine por exemplo um situação onde você queira visitar um site de compras todos os dias e verificar o preço de um determinado produto, bastaria criar um código que carregasse esta página diariamente, percorre-se o html até encontrar o elemento onde o preço se encontra e gravasse esse valor num banco, um xml, ou enviasse para seu celular. bacana né?

    O problema: No meu caso eu não percorria o html completamente o que eu fazia era acessar diretamente o elemento html através do seu XPath(XML Path Language). Se por algum motivo o html da página mudasse o xpath mudaria e eu teria que alterar o xpath no meu código. Mas como as páginas normalmente não sofrem muitas alterações em curtos períodos de tempo não chegou a ser uma dor de cabeça.

    Enfim, como eu fiz: baixei a biblioteca em .Net "HtmlAgilityPack" que me permitiu fazer isso tudo.Veja um trecho de código de como acessar uma página, ir até o xpath(//div[@id='dvTitulo']/h1[@class='titdestaque']) de um elemento h1 dentro de um div e retornar seu innertext:

    HtmlDocument doc;
    string titulo;
    
    public void pesquisarTitulo()
    {
    
     using (WebClient client = new WebClient())
     {
     string html = client.DownloadString("http://www.codeplex.com");
     doc.LoadHtml(html);
     }
    
     //Titulo
     HtmlNode no = doc.DocumentNode.SelectSingleNode("//div[@id='dvTitulo']/h1[@class='titdestaque']");
     titulo = no.InnerText;
    
    }
    

     

    Para capturar o xpath de elementos em uma página web existem extensões de browsers que fazem isso e as próprias ferramentas de inspeção de código nativa dos browsers conseguem te mostrar isso.

    Se preferir posso compartilhar um aplicação bem simples que carregue algum dados de um determinado site."

    ---------------------------------------------------------------------------------------------------------------

    É disso que você precisa? Vi também que você precisa passar parâmetros através pelo POST certo? Também precisei fazer isso pois em alguns sites eu só podia acessar o html com as notificias se antes eu informasse um email para cadastro na newsletter(como fazem os sites de compra coletiva). Se precisar de um exemplo me avisa que te passo.

    abraços, espero ter ajudado.

    A thread foi essa: http://social.msdn.microsoft.com/Forums/pt-BR/vscsharppt/thread/fa9400c6-684f-4393-9ee9-3e1a6988b358/#257172c9-bd9a-4bf1-bed5-ae1b339220fe

    quarta-feira, 14 de setembro de 2011 16:33