Bint Posted October 29, 2007 at 10:31 AM Report Share #143708 Posted October 29, 2007 at 10:31 AM Boas! Sou novo por aqui, apesar de já seguir a revista já á algum tempo 🙂 Pretendo iniciar um pequeno projecto em conjunto com um amigo, e precisamos de algumas dicas aqui do pessoal mais versado em VB (.NET)! Basicamente, necessitamos construír uma espécie de micro-WebCrawler "especializado": Ou seja: com base em URLs pré-definidos, a aplicação deverá aceder aos links, analisar o HTML, e retirar apenas as "frases" que interessam. Para ajudar a visualizar o conceito, imaginem o seguinte: - Aceder a 5 sites de lojas de informática (à Lista de Produtos); - Localizar o Nome, Preço e Imagem do mesmo; - Guardar essa info em BD; Na práctica, o resultado final será qualquer coisa semelhante a www.itcomponents.net. As nossas questões/dúvidas mais importantes são: - Qual a maneira mais eficiente de "aceder e carregar" o conteúdo das páginas, em termos de código VB? - Para localizar as Strings que se pretende (Nome, Preço, etc) pensámos usar Regular Expressions, mas pela análise que fizemos, deve ser necessário usar alguma parametrização prévia, baseada no HTML próprio site... como fariam isto ? Os nossos conhecimentos em VB.NET são (ainda!) limitados 😉 Aguardamos as vossas opiniões! Podem sugerir, como é óbvio, maneiras ou linguagens completamente diferentes para executar esta tarefa... Cumps, Bint Link to comment Share on other sites More sharing options...
LuRsT Posted October 29, 2007 at 10:41 AM Report Share #143709 Posted October 29, 2007 at 10:41 AM Boas, Como não percebo nada de VB.NET a única ajuda que posso dar é na melhor forma de 'sacar' o conteudo de interesse. Para isso a melhor solução seria através de Expressões regulares, de certeza que existe algum módulo de regex para VB.NET que vocês possam usar. http://www.vbdotnetheaven.com/UploadFile/sushmita_kumari/Regex111092006074200AM/Regex1.aspx Abraço BotNet: The Game Tudo Sobre Formigas Link to comment Share on other sites More sharing options...
pedrotuga Posted October 29, 2007 at 12:01 PM Report Share #143733 Posted October 29, 2007 at 12:01 PM Acerca de basica nao posso dizer nada porque nem sequer sei fazer um hello world em basic. Sobre as expressões regulares... uma coisa deste tipo deve sacar os links todos |(href|HREF)=(\"|\')(.*?)(\"|\')| Não experimentei mas com uma ou outra modificação deve ser isto. Tens é que ter conhecimento do url da página onde estas para sacar o endereço do servidor e path para os links relativos. Link to comment Share on other sites More sharing options...
Bint Posted October 29, 2007 at 12:07 PM Author Report Share #143736 Posted October 29, 2007 at 12:07 PM O .NET (VB Express edition) já suporta o uso de RegExp - pelo menos, já consegui executar sobre uma string com HTML de testes... Precisa é de mais algum trabalho, mas já consigo "isolar" os links todos 😉 Por exemplo, acho que vou ter que paraemtrizar algumas "caracteristicas genéricas" do HTML de cada site em particular, e depois usar isso para gerar a string RegExp correcta. É que o HTML muda muito de site para site, e sem isso não estou a ver com identificar numa página o que é o "Nome do produto" sem alguma TAG especifica... A minha questão vai nesse sentido: qual a melhor forma de executar isso? PS: já agora, já atinei com a expressão RegExp para sacar os links MAS não com uma para os sacar com o conteúdo interno, isto é, sacar todas as strings que comecem em <A> e acabem em </A> (assim saco o link e a descrição do mesmo - o que aparece escrito no browser)? Obrigado! Cumps, Bint Link to comment Share on other sites More sharing options...
LuRsT Posted October 29, 2007 at 12:28 PM Report Share #143741 Posted October 29, 2007 at 12:28 PM Mas tu tem cuidado porque essa expresao regular que o pedrotuga forneceu dá TODOS os links, ou seja, apanhas scripts de javascript, apanhas css, apanhas imagens. Tens de arranjar uma para sacar so as com tags <a>. Ao trabalho! 😉 BotNet: The Game Tudo Sobre Formigas Link to comment Share on other sites More sharing options...
pedrotuga Posted October 29, 2007 at 12:41 PM Report Share #143742 Posted October 29, 2007 at 12:41 PM Qualquer coisa como isto deve dar. Agora não me lembro se o espaço precisa de ser escapado ou se tem um metacaracter para o representar. Se tiver tens que mudar a última parte da regex. onte aparece isto: ( *) |<(a|A) (.*) (href|HREF)=(\"|\')(.*?)(\"|\')(.*)>(.*)<\/(a|A)( *)>| Pois... se estás a sacar informação que é especifica do site tens que introduzir parametros que dependem do site em si. O que te acoselho a fazer é o seguinte: crias uma classe chamada spider ou coisa do estilo e defines métodos como get_links() e como membros deves definir o url da pagina. Depois defines uma outra classe chamada por exemplo catcher() que deve receber um ponteito para um classe do tipo spider. Essa classe deve ter dois delimitadores que são usados para sacar o preço por exemplo. Basicamente podes crias quantos objectos desta classe quantos items necessitares de sacar da pagina... e tens sempre acesso ao url da pagina através do ponteiro para a outra classe. Se não for possivel sacar um item através de dois delimitadores podes sempre herdar esta classe e extende-la. Isto éuma das aproximações possiveis que tira partido de POO. Link to comment Share on other sites More sharing options...
Bint Posted October 29, 2007 at 01:19 PM Author Report Share #143749 Posted October 29, 2007 at 01:19 PM Obrigado pelas dicas!! Estou a usar esta Exp para sacar os links: (?:[hH][rR][eE][fF]\s*=)(?:[\s""']*)(?!#|[Mm]ailto|[lL]ocation.|[jJ]avascript|.*css|.*this\.)(.*?)(?:[\s>""']) E esta para o preço: (?:[€])*\d*(?:[\.|,]\d*)* Em um HTML deste género: <td width="80%" colspan="2"><a style="font-size: 16px; font-weight: bold;" href="http://www.exnet.pt/loja/index.php?page=shop.product_details&flypage=shop.flypage&product_id=1502&category_id=67f2567d27518b0d0503fa0effe754a2&option=com_phpshop&Itemid=1">Portátil Toshiba Portégé M400 - PPM41E-01H02FHP</a> </td> o match é apenas na parte: href="http://www.exnet.pt/loja/index.php?page=shop.product_details&flypage=shop.flypage&product_id=1502&category_id=67f2567d27518b0d0503fa0effe754a2&option=com_phpshop&Itemid=1" Existem aqui dois problemas: 1- na primeira, não é devolvida a totalidade da tag <A></A> como já referido; 2- na segunda, consigo fazer o match de algo do género "€2.146,00" ou "2.146,00€", mas também de todos os itens numéricos que existam no html - seria óptimo se conseguisse o mtach apenas de números antecedidos ou precedidos do simbolo € 😉 Vou tentar com a que referiste! Link to comment Share on other sites More sharing options...
pedrotuga Posted October 29, 2007 at 01:27 PM Report Share #143750 Posted October 29, 2007 at 01:27 PM na primeira podes usar uma regex como a que eu escrevi acima, mas provavelmente precisa de algum debugging. Na segnda... assim de repente só estou a ver como fazer isso usando duas regex, mas dá para fazer isso có com uma... deixa ca ver Tipo: isto é gajo para funcionar: €[a-0\,\.]* Link to comment Share on other sites More sharing options...
Bint Posted October 29, 2007 at 01:51 PM Author Report Share #143753 Posted October 29, 2007 at 01:51 PM Hum...... já vi que me meti num grande sarilho!! ? Acabei de ler uns artigos relacionados na net, e acho que vou pensar mais a fundo no assunto antes de mais... Há uma série de coisas que tenho que ter em atenção, como por exemplo evitar "loops" no parsing dos URLs, etc. Info: http://www.vsj.co.uk/dotnet/display.asp?id=407 Tenho que estudar isto com mais calma e depois logo volto aqui para esclarecer as dúvidas- que vão ser muitas, lol Obrigado a todos!! Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now