Como baixar o conteúdo de uma determinada página HTML em uma determinada URL e manipulá-lo?
O código abaixo faz o download através de um stream do conteúdo de uma determinada URL e obtém o código fonte do arquivo especificado renderizado em HTML.
Baixando arquivos da internet de forma automática:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.IO;
using System.Configuration;
namespace Downloads
{
internal class URL
{
///
/// Obtem o conteudo de um arquivo na web
///
/// Url a ser processada
/// Conteúdo do arquivo
public string ObterConteudo(string u)
{
byte[] buffer;
Stream st;
StringBuilder sb;
CarregaObjetos(u, out buffer, out st, out sb);
int iTotalBuffer = 0;
iTotalBuffer = ProcessaStreamReader(buffer, st, sb, iTotalBuffer);
string result = sb.ToString();
return result;
}
///
/// Instancia os objetos
///
/// Url a ser processada
/// Objeto de buffer
/// Objeto de stream
/// Objeto de stringbuilder
private static void CarregaObjetos(string u, out byte[] buffer, out Stream st, out StringBuilder sb)
{
WebRequest wr = WebRequest.Create(u);
WebResponse wrp = wr.GetResponse();
buffer = new byte[128];
st = wrp.GetResponseStream();
sb = new StringBuilder();
}
///
/// Processa o stream reader
///
/// Objeto de buffer
/// Objeto de stream
/// Objeto de stringbuilder
/// Contador de processos do buffer
/// Quantidade de processos do buffer
private static int ProcessaStreamReader(byte[] buffer, Stream st, StringBuilder sb, int iTotalBuffer)
{
iTotalBuffer = st.Read(buffer, 0, 128);
while ((iTotalBuffer != 0))
{
sb.Append(Encoding.ASCII.GetString(buffer, 0, iTotalBuffer));
iTotalBuffer = st.Read(buffer, 0, 128);
}
return iTotalBuffer;
}
}
}
Fazendo a chamada do método e obtendo o conteúdo em uma string em um console application:
using System;
using System.Collections.Generic;
using System.Linq;
using System.IO;
using System.Text;
using System.Net;
namespace Downloads
{
class Program
{
static void Main(string[] args)
{
var downloads = new Downloads(); // instancia a classe
string url = "http://www.mauricio-luis.com/blog"; // url a ser baixada
string conteudoObtido = downloads.ObterConteudo(url); // obtém o conteúdo HTML em uma string
}
}
}
Blog Maurício Luís