hexodin 4 Postado Abril 16, 2010 Olá FabrÃcio, eu estou aprendendo Django, estou no capÃtulo sobre os forms do livro da Appress, estava pensando em fazer um Cross-site, como o myps3t, mas não sobre troféus e sim para pegar dados automáticamente de um site e fazer alguma iterações matemáticas. Não sou nenhum mestre do urllib2 que você utilizou juntamente com expressões regulares (re) para conseguir dados de vários sites com informações sobre usuários e troféus pela rede, como o ps3trophy e o playstation, mas me intrigou o porque você utilizou o método Request ao invés de urlopen, qual a diferença? O request ser aberto pelo opener é mais rápida a procura e iteração com os dados? -- EDIT -- Bom, editando... acho que entendi porque você usou request, pois com um objeto destes, é possÃvel trabalhar com os headers do site e outros métodos, também entendi que você cria uma lista com os dados da página para poder fazer uma iteração sobre ela com o loop, após essa análise, consegui criar um pequeno script que extrai dados do ps3trophycard.com: # -*- coding: iso-8859-1 -*- import urllib2, re class PS3Trophy(): def __init__(self, squidPass = dict()): proxySup = urllib2.ProxyHandler(squidPass) self.opener = urllib2.build_opener(proxySup,urllib2.HTTPHandler, urllib2.HTTPSHandler) urllib2.install_opener(self.opener) self.mainURL = "http://ps3trophycard.com/" def getUserInfo(self, user): userInfoRE = re.compile(r' (?P[0-9,]+)') page = urllib2.Request(self.mainURL + "/profile/%s" % user) page.add_header('Accept-Charset', 'utf-8') pageData = self.opener.open(page).read().split("\n") col = [] for i in pageData: data = userInfoRE.search(i) if data != None: col.append(data.group('number')) print """%s é nÃvel %s e tem: %s troféus de platina; %s troféus de ouro; %s troféus de prata; %s troféus de bronze. Num total de %s troféus!""" % (user, col[0], col[1], col[2], col[3], col[4], col[5]) if __name__ == "__main__": trophy = PS3Trophy({"http":"http://:@:}) trophy.getUserInfo("fabriciols") A saÃda: fabriciols é nÃvel 12 e tem: 7 troféus de platina; 49 troféus de ouro; 159 troféus de prata; 625 troféus de bronze. Num total de 840 troféus! O proxy é porque eu estou no trabalho e tenho que fazer a autenticação no proxy squid antes de poder coletar dados da internet, mas isso é desnecessário em uma conexão doméstica. Compartilhe esta postagem Link to post Share on other sites
fabriciols 5994 Postado Abril 16, 2010 hexodin disse: Olá FabrÃcio, eu estou aprendendo Django, estou no capÃtulo sobre os forms do livro da Appress, estava pensando em fazer um Cross-site, como o myps3t, mas não sobre troféus e sim para pegar dados automáticamente de um site e fazer alguma iterações matemáticas. Não sou nenhum mestre do urllib2 que você utilizou juntamente com expressões regulares (re) para conseguir dados de vários sites com informações sobre usuários e troféus pela rede, como o ps3trophy e o playstation, mas me intrigou o porque você utilizou o método Request ao invés de urlopen, qual a diferença? O request ser aberto pelo opener é mais rápida a procura e iteração com os dados? na verdade, eu tenho uma máscara para esta função que faz a conversão dos resultados para utf-8 e tem alguns outros controles. Esta máscara usa a função "open" de um "Opener" que eu criei anteriormente. Eu preciso deste opener pq manipulo os headers http e cookies ! Não sei se isso é possÃvel fazer direto com o urlopen, as vezes até dá ... :D :bunda: :bunda: :bunda: :bunda: Compartilhe esta postagem Link to post Share on other sites
hexodin 4 Postado Abril 16, 2010 Atualizei minha postagem, eu reparei que antes de puxar você adiciona ao header a aceitação de utf-8 e vi que isso só dá pra fazer com um request. Compartilhe esta postagem Link to post Share on other sites