Script para coletar dados da WEB

296 views
Skip to first unread message

Andrws Vieira

unread,
Aug 21, 2012, 1:04:02 PM8/21/12
to lua...@googlegroups.com
Olá Pessoal,

Me volutarei para uma tarefa de mineração de dados de algumas paginas web, pois penso que em Lua não será tão dificil de fazer e gostaria de saber se você tem algumas dicas para me auxiliar neste processo.

Vou explicar o que tenho que fazer:

1° Tenho uma URL:

Gostaria de acessar essa url do script Lua e coletar todo código HTML para depois retirar as tags com uma expressão regular e formatar as informações contidas da pagina.
A unica coisa que vai mudar de uma URL para outra é o que está em negrito.

Minha principal é duvida é como acessar as informação de uma pagina e colocar em uma table, pois depois disso posso aplicar uma expressão regular para eliminar as tags e formatar o texto do modo que preciso.



Abraços.



--
Andrws Aires Vieira         
Ciência da Computação 8° Semestre
Grupo PET Computação
Grupo de Arquitetura e Circuitos Integrados - GACI
Universidade Federal de Pelotas - UFPel

Elias Barrionovo

unread,
Aug 21, 2012, 1:10:56 PM8/21/12
to lua...@googlegroups.com
2012/8/21 Andrws Vieira <andrws...@gmail.com>:
> Olá Pessoal,
> Minha principal é duvida é como acessar as informação de uma pagina e
> colocar em uma table, pois depois disso posso aplicar uma expressão regular
> para eliminar as tags e formatar o texto do modo que preciso.

Para fazer as requisições, use LuaSocket (instale pelo luarocks).
Para parsear o html, a wiki tem várias dicas e bibliotecas [1].

[1] http://lua-users.org/wiki/LuaXml
--
NI!

Eric Chiesse

unread,
Aug 21, 2012, 1:22:18 PM8/21/12
to lua...@googlegroups.com
Por falar nisso. LuaSocket já tem implementação para lidar com autenticação de proxy (criptografada e não basic)?

Por não conseguir passar por qualquer proxy, eu acabo preferindo usar python com urllib em tarefas do gênero.

---
Eric Chiesse




Elias Barrionovo

unread,
Aug 21, 2012, 1:31:38 PM8/21/12
to lua...@googlegroups.com
2012/8/21 Eric Chiesse <echi...@gmail.com>:
> Por falar nisso. LuaSocket já tem implementação para lidar com autenticação
> de proxy (criptografada e não basic)?

Não sei. =/

> Por não conseguir passar por qualquer proxy, eu acabo preferindo usar python
> com urllib em tarefas do gênero.

Off-topic nessa lista, mas se você for usar a web em Python, fica a
dica: use requests [1]

[1] http://docs.python-requests.org/en/latest/index.html

--
NI!

Andrws Vieira

unread,
Aug 21, 2012, 7:11:07 PM8/21/12
to lua...@googlegroups.com
Olá, 

Eu instalo o LuaRocks e já poderei usar LuaSocket ??


Abraços.


--
NI!

Andrws Vieira

unread,
Aug 21, 2012, 8:05:50 PM8/21/12
to lua...@googlegroups.com
Boa Noite,

Executei o comando luarocks install luasocket, porém no final deu um erro:


"build" não reconhecido como um comando interno ou externo, um programa operavel ou um arquivo em lotes.
cp: cannot star "scr/mine.dll": no such file or directory
cp: cannot star "scr/socket.dll": no such file or directory


O que pode ser o problema ???


Abraços.

Andrws Vieira

unread,
Aug 21, 2012, 9:11:55 PM8/21/12
to lua...@googlegroups.com
Olá,

Consegui resolver este problema, porem agora estou com outro :)
Peguei o exemplo a seguir da documentação do LuaSocket, ele pega e imprimi o codigo html, porém não entendo como armazenar o codigo html em uma tabela em vez de imprimir. Alguma sugestão ???


-- load the http module
local io = require("io")
local http = require("socket.http")
local ltn12 = require("ltn12")


-- connect to server "www.cs.princeton.edu" and retrieves this manual
-- file from "~diego/professional/luasocket/http.html" and print it to stdout
http.request{
    sink = ltn12.sink.file(io.stdout)

Andrws Vieira

unread,
Aug 22, 2012, 10:29:08 AM8/22/12
to lua...@googlegroups.com
Aproveitando, como eu incorporo um interpretador Lua mais o modulo do luasocket junto com meu codigo para que em um PC que nao tenha Lua nem Luasockets possa executar minha aplicação ???


Abraços.

Andrws Vieira

unread,
Aug 22, 2012, 1:35:53 PM8/22/12
to lua...@googlegroups.com
Pessoal,

Outro problema ^^

Eu estou tentando pegar os dados de uma pagina que necessita login e senha( eu tenho a senha e login ^^)

Já tentei enviar o usuário e senha pela URL,

Porém acho que o pagina não permite autenticação pela url, talvez seja por cookies ou algo do tipo.


Abraços.

Eric Chiesse

unread,
Aug 22, 2012, 1:50:11 PM8/22/12
to lua...@googlegroups.com
Vc tem que achar no form as variáveis pelas quais são passados o login e a senha e criar essas variavies no seu request.

---
Eric

Andrws Vieira

unread,
Aug 22, 2012, 2:42:15 PM8/22/12
to lua...@googlegroups.com
Não funcionou,  mesmo passando as variáveis o processo de autenticação não funcionou, pois eu acho que a sessão é autenticada via cookie.

Por exemplo a pagina que eu quero acessar vizualizei as requisões no chrome e vi que ele envia junto com GET um campo com o cookie.
Cookie:
PHPSESSID=d8489cf1a301f203f491c6b94fde5d2; __utma=17365238.837195882.1345660104.134566004.1345660104.1; __utmb=173652348.8.10.1345660104; __utmc=173652348; __utmz=173652348.135660104.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)

Eu tentei enviar um campo cookie no http.reques, segue meu teste abaixo que não funcionou =/

http.request{
cookie = "PHPSESSID=d8489cf1a301f2083f491c6b94fde5d2; __utma=17365234.837195882.1345660104.1345660104.1345660104.1; __utmb=73652348.8.0.1345660104; __utmc=173652348; __utmz=173652348.1345660104.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)",
    sink = ltn12.sink.file(io.stdout)
}

Eric Chiesse

unread,
Aug 22, 2012, 4:00:05 PM8/22/12
to lua...@googlegroups.com
Vc mandou a requisição de login e senha com get ou post? Tenta post se for o caso.

Vc por acaso está atrás de um proxy? (Você consegue baixar uma página qualquer na internet?) Se estiver as coisas vão ficar complicadas.

Infelizmente ainda não mexi com cookies no luasocket então não consigo te ajudar muito. De qq forma o único que me parece relevante para o caso (se for o caso) é o PHPSESSID. Os outros têm a ver com o google analytics.

Saudações.
---
Eric Chiesse

Andrws Vieira

unread,
Aug 22, 2012, 5:13:26 PM8/22/12
to lua...@googlegroups.com
Não estou usando proxy.
E sim, consigo baixar qualquer pagina que não necessite de autenticação.

Eu estou usando o seguinte trecho de codigo: 
http.request{
    sink = ltn12.sink.file(io.stdout)
}

Acredito que esteja realizando um metodo GET.


Abraços.

Henrique Magarotto

unread,
Aug 22, 2012, 5:35:48 PM8/22/12
to lua...@googlegroups.com
Vc deve enviar o cookie no header http.

http.request {
url="...",
headers={cookie="PHPSESSID=...;...."},
...

Andrws Vieira

unread,
Aug 22, 2012, 5:59:43 PM8/22/12
to lua...@googlegroups.com
Perfeito, funcionou muito obrigado !!!! 

Agora que já tenho o codigo html vou começar a  "minerar" ele para conseguir capturar as informações que necessito.
Logo devo voltar a incomoda-los !! ashjasuihasi


Valeu, Abraços.
Reply all
Reply to author
Forward
0 new messages